Module ID is now string, not int;Module Update function added

This commit is contained in:
Caesar2011
2018-07-19 09:59:48 +02:00
parent 81b7809b44
commit c0ad3df829
14 changed files with 193 additions and 133 deletions

View File

@@ -13,7 +13,6 @@ import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.Pair;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@@ -57,19 +56,19 @@ public class MainActivity extends AppCompatActivity
private NavigationView mNavigationView; private NavigationView mNavigationView;
private int fragmentPage = FRAGMENT_NONE; private int fragmentPage = FRAGMENT_NONE;
private int fragmentStatus = 0; private String fragmentData = "";
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
int newFragmentPage = FRAGMENT_NONE; int newFragmentPage = FRAGMENT_NONE;
int newFragmentStatus = 0; String newFragmentData = "";
if (savedInstanceState != null) { if (savedInstanceState != null) {
newFragmentPage = savedInstanceState.getInt(ARG_FRAGMENT_PAGE, fragmentPage); newFragmentPage = savedInstanceState.getInt(ARG_FRAGMENT_PAGE, fragmentPage);
newFragmentStatus = savedInstanceState.getInt(ARG_FRAGMENT_STATUS, fragmentPage); newFragmentData = savedInstanceState.getString(ARG_FRAGMENT_STATUS, fragmentData);
log.d("fragmentPage", newFragmentPage); log.d("fragmentPage", newFragmentPage);
log.d("fragmentStatus", newFragmentStatus); log.d("fragmentData", newFragmentData);
} }
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
@@ -89,7 +88,7 @@ public class MainActivity extends AppCompatActivity
if (newFragmentPage != FRAGMENT_LOGIN && newFragmentPage != FRAGMENT_STARTUP && newFragmentPage != FRAGMENT_NONE) { if (newFragmentPage != FRAGMENT_LOGIN && newFragmentPage != FRAGMENT_STARTUP && newFragmentPage != FRAGMENT_NONE) {
LoginToken loginToken = getKVV().easyLogin(); LoginToken loginToken = getKVV().easyLogin();
if (loginToken != null) if (loginToken != null)
toLoginState(loginToken, newFragmentPage, newFragmentStatus); toLoginState(loginToken, newFragmentPage, newFragmentData);
else else
checkAndDoLogin(); checkAndDoLogin();
} else { } else {
@@ -132,7 +131,7 @@ public class MainActivity extends AppCompatActivity
@SuppressWarnings("StatementWithEmptyBody") @SuppressWarnings("StatementWithEmptyBody")
@Override @Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) { public boolean onNavigationItemSelected(@NonNull MenuItem item) {
//log.d("ITEM SELECTED", item.getTitle()); log.d("ITEM SELECTED", item.getTitle());
// Handle navigation view item clicks here. // Handle navigation view item clicks here.
int id = item.getItemId(); int id = item.getItemId();
@@ -164,7 +163,7 @@ public class MainActivity extends AppCompatActivity
int size = mNavigationView.getMenu().size(); int size = mNavigationView.getMenu().size();
for (int k = 0; k < size; k++) { for (int k = 0; k < size; k++) {
//mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getOrder() == 101+itemPosition); //mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getOrder() == 101+itemPosition);
mNavigationView.getMenu().getItem(k).setChecked(false); mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k) == item);
} }
item.setChecked(true); item.setChecked(true);
@@ -180,7 +179,7 @@ public class MainActivity extends AppCompatActivity
@Override @Override
protected void onSaveInstanceState(Bundle savedInstanceState) { protected void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt(ARG_FRAGMENT_PAGE, fragmentPage); savedInstanceState.putInt(ARG_FRAGMENT_PAGE, fragmentPage);
savedInstanceState.putInt(ARG_FRAGMENT_STATUS, fragmentStatus); savedInstanceState.putString(ARG_FRAGMENT_STATUS, fragmentData);
super.onSaveInstanceState(savedInstanceState); super.onSaveInstanceState(savedInstanceState);
} }
@@ -210,7 +209,7 @@ public class MainActivity extends AppCompatActivity
changeFragment(FRAGMENT_LOGIN); changeFragment(FRAGMENT_LOGIN);
} }
private void toLoginState(LoginToken loginToken, int newFragment, int newData) { private void toLoginState(LoginToken loginToken, int newFragment, String newData) {
if (loginToken == null) { if (loginToken == null) {
toLogoutState(); toLogoutState();
} else { } else {
@@ -218,7 +217,7 @@ public class MainActivity extends AppCompatActivity
} }
} }
private void toLoginState(String fullname, String email, int newFragment, int newData) { private void toLoginState(String fullname, String email, int newFragment, String newData) {
changeFragment(newFragment, newData); changeFragment(newFragment, newData);
View header = mNavigationView.getHeaderView(0); View header = mNavigationView.getHeaderView(0);
@@ -237,7 +236,7 @@ public class MainActivity extends AppCompatActivity
} }
this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> { this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> {
this.getKVV().endUpdate(); this.getKVV().endUpdate();
toLoginState(success, getDefaultFragmentAfterLogin(), 0); toLoginState(success, getDefaultFragmentAfterLogin(), "");
}, error -> { }, error -> {
log.e(error); log.e(error);
this.getKVV().endUpdate(); this.getKVV().endUpdate();
@@ -247,10 +246,10 @@ public class MainActivity extends AppCompatActivity
} }
private void changeFragment(int newFragment) { private void changeFragment(int newFragment) {
changeFragment(newFragment, 0); changeFragment(newFragment, "");
} }
private void changeFragment(int newFragment, int newData) { private void changeFragment(int newFragment, String newData) {
onTitleTextChange(R.string.courses); onTitleTextChange(R.string.courses);
Fragment fragment; Fragment fragment;
if (newFragment == FRAGMENT_MODULES) { if (newFragment == FRAGMENT_MODULES) {
@@ -303,11 +302,11 @@ public class MainActivity extends AppCompatActivity
log.d("Modules.get", success.size()); log.d("Modules.get", success.size());
//SubMenu moduleMenu = navigationView.getMenu().findItem(R.id.nav_modules).getSubMenu(); //SubMenu moduleMenu = navigationView.getMenu().findItem(R.id.nav_modules).getSubMenu();
int i = 0; int i = 0;
for (Iterator<Pair<Modules.Module, Integer>> it = success.latestSemesterIterator(); it.hasNext(); ) { for (Iterator<Modules.Module> it = success.latestSemesterIterator(); it.hasNext(); ) {
Pair<Modules.Module, Integer> module = it.next(); Modules.Module module = it.next();
MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.first.title); MenuItem menuItem = mNavigationView.getMenu().add(Menu.NONE, Menu.NONE, 101 + i, module.title);
menuItem.setOnMenuItemClickListener(item -> { menuItem.setOnMenuItemClickListener(item -> {
onModulesFragmentInteraction(module.second); onModulesFragmentInteraction(module.getID());
return false; return false;
}); });
i++; i++;
@@ -315,14 +314,18 @@ public class MainActivity extends AppCompatActivity
}, error -> log.e("Modules.error", error)); }, error -> log.e("Modules.error", error));
} }
if (newFragment == FRAGMENT_MODULES_DETAILS) { if (newFragment == FRAGMENT_MODULES_DETAILS) {
int size = mNavigationView.getMenu().size(); getKVV().getModule(newData, success -> {
for (int k = 0; k < size; k++) { int size = mNavigationView.getMenu().size();
mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getOrder() == 101+newData); //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);
} }
this.fragmentPage = newFragment; this.fragmentPage = newFragment;
this.fragmentStatus = newData; this.fragmentData = newData;
} }
@@ -333,11 +336,11 @@ public class MainActivity extends AppCompatActivity
public void onLoginFragmentInteraction(LoginToken loginToken) { public void onLoginFragmentInteraction(LoginToken loginToken) {
toLoginState(loginToken.getFullname(), loginToken.getEmail(), getDefaultFragmentAfterLogin(), 0); toLoginState(loginToken.getFullname(), loginToken.getEmail(), getDefaultFragmentAfterLogin(), "");
} }
public void onModulesFragmentInteraction(final int itemPosition) { public void onModulesFragmentInteraction(final String itemID) {
changeFragment(FRAGMENT_MODULES_DETAILS, itemPosition); changeFragment(FRAGMENT_MODULES_DETAILS, itemID);
} }
public void onTitleTextChange(String newTitle) { public void onTitleTextChange(String newTitle) {

View File

@@ -42,16 +42,16 @@ public class ModulesAdapter extends RecyclerView.Adapter<ItemViewHolder> {
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
if (mValues == null) if (mValues == null)
return; return;
final int finalPosition = holder.getAdapterPosition(); Modules.Module module = mValues.getByIndex(holder.getAdapterPosition());
holder.mTitle.setText(mValues.get(finalPosition).title); holder.mTitle.setText(module.title);
holder.mSubLeft.setText(mValues.get(finalPosition).semester); holder.mSubLeft.setText(module.semester);
holder.mSubRight.setText(mValues.get(finalPosition).type); holder.mSubRight.setText(module.type);
holder.mView.setOnClickListener(v -> { holder.mView.setOnClickListener(v -> {
if (null != mListener) { if (null != mListener) {
// Notify the active callbacks interface (the activity, if the // Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected. // fragment is attached to one) that an item has been selected.
mListener.onModulesFragmentInteraction(finalPosition); mListener.onModulesFragmentInteraction(module.getID());
} }
}); });
} }

View File

@@ -105,6 +105,6 @@ public class ModulesFragment extends Fragment {
} }
public interface OnModulesFragmentInteractionListener { public interface OnModulesFragmentInteractionListener {
void onModulesFragmentInteraction(int item); void onModulesFragmentInteraction(String id);
} }
} }

View File

@@ -8,10 +8,10 @@ import android.support.v4.app.FragmentStatePagerAdapter;
import de.sebse.fuplanner.R; import de.sebse.fuplanner.R;
class ModDetailAdapter extends FragmentStatePagerAdapter { class ModDetailAdapter extends FragmentStatePagerAdapter {
private final int mItemPos; private final String mItemPos;
private final Context mContext; private final Context mContext;
ModDetailAdapter(FragmentManager fm, int itemPosition, Context context) { ModDetailAdapter(FragmentManager fm, String itemPosition, Context context) {
super(fm); super(fm);
this.mContext = context; this.mContext = context;
this.mItemPos = itemPosition; this.mItemPos = itemPosition;

View File

@@ -24,7 +24,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailAnnounceFragment extends Fragment { public class ModDetailAnnounceFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
private int mItemPos; private String mItemPos;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailAnnounceAdapter adapter; private ModDetailAnnounceAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@@ -41,10 +41,10 @@ public class ModDetailAnnounceFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailAnnounceFragment. * @return A new instance of fragment ModDetailAnnounceFragment.
*/ */
public static ModDetailAnnounceFragment newInstance(int itemPosition) { public static ModDetailAnnounceFragment newInstance(String itemPosition) {
ModDetailAnnounceFragment fragment = new ModDetailAnnounceFragment(); ModDetailAnnounceFragment fragment = new ModDetailAnnounceFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -53,7 +53,7 @@ public class ModDetailAnnounceFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
} }
@@ -79,8 +79,7 @@ public class ModDetailAnnounceFragment extends Fragment {
private void refresh(boolean forceRefresh) { private void refresh(boolean forceRefresh) {
if (getActivity() != null) { if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModule(mItemPos, (Modules.Module module) -> {
Modules.Module module = success.get(mItemPos);
adapter.setModule(module); adapter.setModule(module);
kvv.getModuleAnnouncements(module, success1 -> { kvv.getModuleAnnouncements(module, success1 -> {
adapter.setModule(); adapter.setModule();

View File

@@ -24,7 +24,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailAssignmentFragment extends Fragment { public class ModDetailAssignmentFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
private int mItemPos; private String mItemPos;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailAssignmentAdapter adapter; private ModDetailAssignmentAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@@ -41,10 +41,10 @@ public class ModDetailAssignmentFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailAnnounceFragment. * @return A new instance of fragment ModDetailAnnounceFragment.
*/ */
public static ModDetailAssignmentFragment newInstance(int itemPosition) { public static ModDetailAssignmentFragment newInstance(String itemPosition) {
ModDetailAssignmentFragment fragment = new ModDetailAssignmentFragment(); ModDetailAssignmentFragment fragment = new ModDetailAssignmentFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -53,7 +53,7 @@ public class ModDetailAssignmentFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
} }
@@ -79,8 +79,7 @@ public class ModDetailAssignmentFragment extends Fragment {
private void refresh(boolean forceRefresh) { private void refresh(boolean forceRefresh) {
if (getActivity() != null) { if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModule(mItemPos, (Modules.Module module) -> {
Modules.Module module = success.get(mItemPos);
adapter.setModule(module); adapter.setModule(module);
kvv.getModuleAssignments(module, success1 -> { kvv.getModuleAssignments(module, success1 -> {
adapter.setModule(); adapter.setModule();

View File

@@ -26,7 +26,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailEventFragment extends Fragment { public class ModDetailEventFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
private int mItemPos; private String mItemPos;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailEventAdapter adapter; private ModDetailEventAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@@ -43,10 +43,10 @@ public class ModDetailEventFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailAnnounceFragment. * @return A new instance of fragment ModDetailAnnounceFragment.
*/ */
public static ModDetailEventFragment newInstance(int itemPosition) { public static ModDetailEventFragment newInstance(String itemPosition) {
ModDetailEventFragment fragment = new ModDetailEventFragment(); ModDetailEventFragment fragment = new ModDetailEventFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -55,7 +55,7 @@ public class ModDetailEventFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
} }
@@ -83,8 +83,7 @@ public class ModDetailEventFragment extends Fragment {
private void refresh(boolean forceRefresh) { private void refresh(boolean forceRefresh) {
if (getActivity() != null) { if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModule(mItemPos, (Modules.Module module) -> {
Modules.Module module = success.get(mItemPos);
adapter.setModule(module); adapter.setModule(module);
kvv.getModuleEvents(module, success1 -> { kvv.getModuleEvents(module, success1 -> {
adapter.setModule(); adapter.setModule();

View File

@@ -25,7 +25,7 @@ public class ModDetailFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
// Parameters // Parameters
private int mItemPos; private String mItemPos;
private MainAcitivityListener mListener; private MainAcitivityListener mListener;
private Logger log = new Logger(this); private Logger log = new Logger(this);
@@ -41,10 +41,10 @@ public class ModDetailFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailFragment. * @return A new instance of fragment ModDetailFragment.
*/ */
public static Fragment newInstance(int itemPosition) { public static Fragment newInstance(String itemPosition) {
ModDetailFragment fragment = new ModDetailFragment(); ModDetailFragment fragment = new ModDetailFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -53,7 +53,7 @@ public class ModDetailFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
if (mListener != null) { if (mListener != null) {
mListener.onTitleTextChange(R.string.courses); mListener.onTitleTextChange(R.string.courses);

View File

@@ -26,7 +26,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailGradebookFragment extends Fragment { public class ModDetailGradebookFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
private int mItemPos; private String mItemPos;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailGradebookAdapter adapter; private ModDetailGradebookAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@@ -43,10 +43,10 @@ public class ModDetailGradebookFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailAnnounceFragment. * @return A new instance of fragment ModDetailAnnounceFragment.
*/ */
public static ModDetailGradebookFragment newInstance(int itemPosition) { public static ModDetailGradebookFragment newInstance(String itemPosition) {
ModDetailGradebookFragment fragment = new ModDetailGradebookFragment(); ModDetailGradebookFragment fragment = new ModDetailGradebookFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -55,7 +55,7 @@ public class ModDetailGradebookFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
} }
@@ -83,8 +83,7 @@ public class ModDetailGradebookFragment extends Fragment {
private void refresh(boolean forceRefresh) { private void refresh(boolean forceRefresh) {
if (getActivity() != null) { if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModule(mItemPos, (Modules.Module module) -> {
Modules.Module module = success.get(mItemPos);
adapter.setModule(module); adapter.setModule(module);
kvv.getModuleGradebook(module, success1 -> { kvv.getModuleGradebook(module, success1 -> {
adapter.setModule(); adapter.setModule();

View File

@@ -26,7 +26,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailOverviewFragment extends Fragment { public class ModDetailOverviewFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition"; private static final String ARG_POSITION = "itemPosition";
private int mItemPos; private String mItemPos;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailOverviewAdapter adapter; private ModDetailOverviewAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@@ -43,10 +43,10 @@ public class ModDetailOverviewFragment extends Fragment {
* @param itemPosition Item position in module list. * @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailOverviewFragment. * @return A new instance of fragment ModDetailOverviewFragment.
*/ */
public static ModDetailOverviewFragment newInstance(int itemPosition) { public static ModDetailOverviewFragment newInstance(String itemPosition) {
ModDetailOverviewFragment fragment = new ModDetailOverviewFragment(); ModDetailOverviewFragment fragment = new ModDetailOverviewFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition); args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
@@ -55,7 +55,7 @@ public class ModDetailOverviewFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null) { if (getArguments() != null) {
mItemPos = getArguments().getInt(ARG_POSITION); mItemPos = getArguments().getString(ARG_POSITION);
} }
} }
@@ -83,8 +83,7 @@ public class ModDetailOverviewFragment extends Fragment {
private void refresh(boolean forceRefresh) { private void refresh(boolean forceRefresh) {
if (getActivity() != null) { if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV(); KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> { kvv.getModule(mItemPos, (Modules.Module module) -> {
Modules.Module module = success.get(mItemPos);
adapter.setModule(module); adapter.setModule(module);
kvv.getModuleDetails(module, pair -> { kvv.getModuleDetails(module, pair -> {
adapter.setModule(); adapter.setModule();

View File

@@ -10,6 +10,7 @@ import java.util.HashMap;
import de.sebse.fuplanner.services.KVV.types.LoginToken; import de.sebse.fuplanner.services.KVV.types.LoginToken;
import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.network.NetworkCallback; import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback; import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
@@ -23,6 +24,7 @@ public class KVV {
private boolean isUpdating; private boolean isUpdating;
private ArrayList<LastTokenCallback> updatingList; private ArrayList<LastTokenCallback> updatingList;
private HashMap<String, Object> addons = new HashMap<>(); private HashMap<String, Object> addons = new HashMap<>();
private Logger log = new Logger(this);
public KVV(Context context) { public KVV(Context context) {
this.context = context; this.context = context;
@@ -61,12 +63,28 @@ public class KVV {
addons.clear(); addons.clear();
} }
public void getModule(String id, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
getModule(id, callback, error, false);
}
public void getModule(String id, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> {
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules);
}
modules.getModule(id, callback, error, forceRefresh);
});
}
public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error) { public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error) {
getModuleList(callback, error, false); getModuleList(callback, error, false);
} }
public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> { this.getLastToken(token -> {
log.d("token here", token);
KVVModuleList modules = (KVVModuleList) addons.get("modules"); KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) { if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token); modules = new KVVModuleList(KVV.this.context, token);

View File

@@ -66,7 +66,10 @@ public class KVVModuleList extends HTTPService {
return; return;
} }
this.getModuleListUpgrade(success -> { this.getModuleListUpgrade(success -> {
this.moduleList = success; if (this.moduleList == null)
this.moduleList = success;
else
this.moduleList.updateList(success);
callback.onResponse(this.moduleList); callback.onResponse(this.moduleList);
queueModuleDetails.next("list"); queueModuleDetails.next("list");
}, queueModuleDetails.check("list", errorCallback)); }, queueModuleDetails.check("list", errorCallback));
@@ -129,8 +132,8 @@ public class KVVModuleList extends HTTPService {
this.moduleList.save(context); this.moduleList.save(context);
} }
public void getModule(int index, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback, boolean forceRefresh) { public void getModule(String id, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback, boolean forceRefresh) {
this.getModuleList(success -> callback.onResponse(success.get(index)), errorCallback, forceRefresh); this.getModuleList(success -> callback.onResponse(success.get(id)), errorCallback, forceRefresh);
} }

View File

@@ -3,7 +3,6 @@ package de.sebse.fuplanner.services.KVV.types;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Pair;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@@ -26,7 +25,7 @@ import de.sebse.fuplanner.tools.SortedModuleList;
*/ */
public class Modules implements Iterable<Modules.Module>, Serializable { public class Modules implements Iterable<Modules.Module>, Serializable {
private final SortedModuleList list; private SortedModuleList list;
private String latestSemester = null; private String latestSemester = null;
private LoginToken token; private LoginToken token;
//private transient Logger log = new Logger(this); //private transient Logger log = new Logger(this);
@@ -86,74 +85,22 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
@NonNull @NonNull
@Override @Override
public Iterator<Module> iterator() { public Iterator<Module> iterator() {
return new Iterator<Module>() { return this.list.iterator();
private int pos = -1;
@Override
public boolean hasNext() {
return pos+1 < list.size();
}
@Override
public Module next() {
pos++;
if (pos < list.size())
return list.get(pos);
return null;
}
@Override
public void remove() {
throw new UnsupportedOperationException("no changes allowed");
}
};
} }
public Iterator<Pair<Module, Integer>> latestSemesterIterator() { public Iterator<Module> latestSemesterIterator() {
return new Iterator<Pair<Module, Integer>>() { return this.list.semesterIterator(latestSemester);
private int index = -1;
private int next = -1;
@Override
public boolean hasNext() {
if (index==next)
predict();
return next != -1;
}
@Override
public Pair<Module, Integer> next() {
if (index == next)
predict();
if (next == -1)
return null;
index = next;
return new Pair<>(list.get(index), index);
}
@Override
public void remove() {
throw new UnsupportedOperationException("no changes allowed");
}
private void predict() {
int size = list.size();
do {
next++;
} while (next < size && decline(list.get(next)));
if (next == size)
next = -1;
}
private boolean decline(Module ob){
return !ob.semester.equals(latestSemester);
}
};
} }
public int size() { public int size() {
return this.list.size(); return this.list.size();
} }
public Module get(int index) { public Module get(String id) {
return this.list.get(id);
}
public Module getByIndex(int index) {
return this.list.get(index); return this.list.get(index);
} }
@@ -182,6 +129,21 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
return token; return token;
} }
public void updateList(Modules modules) {
this.latestSemester = modules.latestSemester;
SortedModuleList old = this.list;
this.list = modules.list;
for (Module oldModule : old) {
Module newModule = this.list.get(oldModule.getID());
if (newModule != null) {
newModule.announcements = oldModule.announcements;
newModule.assignments = oldModule.assignments;
newModule.events = oldModule.events;
newModule.gradebook = oldModule.gradebook;
}
}
}
public class Module implements Serializable { public class Module implements Serializable {
public final String semester; public final String semester;
public final HashSet<String> lvNumber; public final HashSet<String> lvNumber;

View File

@@ -1,9 +1,13 @@
package de.sebse.fuplanner.tools; package de.sebse.fuplanner.tools;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.io.Serializable; import java.io.Serializable;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator;
import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.services.KVV.types.Modules;
@@ -23,14 +27,89 @@ public class SortedModuleList extends AbstractList<Modules.Module> implements Se
}); });
} }
@Deprecated
@Override @Override
public Modules.Module get(int i) { public Modules.Module get(int i) {
return internalList.get(i); return internalList.get(i);
} }
@Nullable
public Modules.Module get(String id) {
for (Modules.Module module : this.internalList) {
if (module.getID().equals(id))
return module;
}
return null;
}
@Override @Override
public int size() { public int size() {
return internalList.size(); return internalList.size();
} }
@NonNull
@Override
public Iterator<Modules.Module> iterator() {
return new Iterator<Modules.Module>() {
private int pos = -1;
@Override
public boolean hasNext() {
return pos+1 < internalList.size();
}
@Override
public Modules.Module next() {
pos++;
if (pos < internalList.size())
return internalList.get(pos);
return null;
}
@Override
public void remove() {
throw new UnsupportedOperationException("no changes allowed");
}
};
}
public Iterator<Modules.Module> semesterIterator(String semester) {
return new Iterator<Modules.Module>() {
private int index = -1;
private int next = -1;
@Override
public boolean hasNext() {
if (index==next)
predict();
return next != -1;
}
@Override
public Modules.Module next() {
if (index == next)
predict();
if (next == -1)
return null;
index = next;
return internalList.get(index);
}
@Override
public void remove() {
throw new UnsupportedOperationException("no changes allowed");
}
private void predict() {
int size = internalList.size();
do {
next++;
} while (next < size && decline(internalList.get(next)));
if (next == size)
next = -1;
}
private boolean decline(Modules.Module ob){
return !ob.semester.equals(semester);
}
};
}
} }