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.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Pair;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -57,19 +56,19 @@ public class MainActivity extends AppCompatActivity
private NavigationView mNavigationView;
private int fragmentPage = FRAGMENT_NONE;
private int fragmentStatus = 0;
private String fragmentData = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int newFragmentPage = FRAGMENT_NONE;
int newFragmentStatus = 0;
String newFragmentData = "";
if (savedInstanceState != null) {
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("fragmentStatus", newFragmentStatus);
log.d("fragmentData", newFragmentData);
}
setContentView(R.layout.activity_main);
@@ -89,7 +88,7 @@ public class MainActivity extends AppCompatActivity
if (newFragmentPage != FRAGMENT_LOGIN && newFragmentPage != FRAGMENT_STARTUP && newFragmentPage != FRAGMENT_NONE) {
LoginToken loginToken = getKVV().easyLogin();
if (loginToken != null)
toLoginState(loginToken, newFragmentPage, newFragmentStatus);
toLoginState(loginToken, newFragmentPage, newFragmentData);
else
checkAndDoLogin();
} else {
@@ -132,7 +131,7 @@ public class MainActivity extends AppCompatActivity
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
//log.d("ITEM SELECTED", item.getTitle());
log.d("ITEM SELECTED", item.getTitle());
// Handle navigation view item clicks here.
int id = item.getItemId();
@@ -164,7 +163,7 @@ public class MainActivity extends AppCompatActivity
int size = mNavigationView.getMenu().size();
for (int k = 0; k < size; k++) {
//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);
@@ -180,7 +179,7 @@ public class MainActivity extends AppCompatActivity
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt(ARG_FRAGMENT_PAGE, fragmentPage);
savedInstanceState.putInt(ARG_FRAGMENT_STATUS, fragmentStatus);
savedInstanceState.putString(ARG_FRAGMENT_STATUS, fragmentData);
super.onSaveInstanceState(savedInstanceState);
}
@@ -210,7 +209,7 @@ public class MainActivity extends AppCompatActivity
changeFragment(FRAGMENT_LOGIN);
}
private void toLoginState(LoginToken loginToken, int newFragment, int newData) {
private void toLoginState(LoginToken loginToken, int newFragment, String newData) {
if (loginToken == null) {
toLogoutState();
} 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);
View header = mNavigationView.getHeaderView(0);
@@ -237,7 +236,7 @@ public class MainActivity extends AppCompatActivity
}
this.getKVV().login(credentials.getUsername(), credentials.getPassword(), success -> {
this.getKVV().endUpdate();
toLoginState(success, getDefaultFragmentAfterLogin(), 0);
toLoginState(success, getDefaultFragmentAfterLogin(), "");
}, error -> {
log.e(error);
this.getKVV().endUpdate();
@@ -247,10 +246,10 @@ public class MainActivity extends AppCompatActivity
}
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);
Fragment fragment;
if (newFragment == FRAGMENT_MODULES) {
@@ -303,11 +302,11 @@ public class MainActivity extends AppCompatActivity
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);
for (Iterator<Modules.Module> 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.second);
onModulesFragmentInteraction(module.getID());
return false;
});
i++;
@@ -315,14 +314,18 @@ public class MainActivity extends AppCompatActivity
}, error -> log.e("Modules.error", error));
}
if (newFragment == FRAGMENT_MODULES_DETAILS) {
int size = mNavigationView.getMenu().size();
for (int k = 0; k < size; k++) {
mNavigationView.getMenu().getItem(k).setChecked(mNavigationView.getMenu().getItem(k).getOrder() == 101+newData);
}
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);
}
this.fragmentPage = newFragment;
this.fragmentStatus = newData;
this.fragmentData = newData;
}
@@ -333,11 +336,11 @@ public class MainActivity extends AppCompatActivity
public void onLoginFragmentInteraction(LoginToken loginToken) {
toLoginState(loginToken.getFullname(), loginToken.getEmail(), getDefaultFragmentAfterLogin(), 0);
toLoginState(loginToken.getFullname(), loginToken.getEmail(), getDefaultFragmentAfterLogin(), "");
}
public void onModulesFragmentInteraction(final int itemPosition) {
changeFragment(FRAGMENT_MODULES_DETAILS, itemPosition);
public void onModulesFragmentInteraction(final String itemID) {
changeFragment(FRAGMENT_MODULES_DETAILS, itemID);
}
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) {
if (mValues == null)
return;
final int finalPosition = holder.getAdapterPosition();
holder.mTitle.setText(mValues.get(finalPosition).title);
holder.mSubLeft.setText(mValues.get(finalPosition).semester);
holder.mSubRight.setText(mValues.get(finalPosition).type);
Modules.Module module = mValues.getByIndex(holder.getAdapterPosition());
holder.mTitle.setText(module.title);
holder.mSubLeft.setText(module.semester);
holder.mSubRight.setText(module.type);
holder.mView.setOnClickListener(v -> {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// 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 {
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;
class ModDetailAdapter extends FragmentStatePagerAdapter {
private final int mItemPos;
private final String mItemPos;
private final Context mContext;
ModDetailAdapter(FragmentManager fm, int itemPosition, Context context) {
ModDetailAdapter(FragmentManager fm, String itemPosition, Context context) {
super(fm);
this.mContext = context;
this.mItemPos = itemPosition;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -26,7 +26,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
public class ModDetailOverviewFragment extends Fragment {
private static final String ARG_POSITION = "itemPosition";
private int mItemPos;
private String mItemPos;
private Logger log = new Logger(this);
private ModDetailOverviewAdapter adapter;
private SwipeRefreshLayout swipeLayout;
@@ -43,10 +43,10 @@ public class ModDetailOverviewFragment extends Fragment {
* @param itemPosition Item position in module list.
* @return A new instance of fragment ModDetailOverviewFragment.
*/
public static ModDetailOverviewFragment newInstance(int itemPosition) {
public static ModDetailOverviewFragment newInstance(String itemPosition) {
ModDetailOverviewFragment fragment = new ModDetailOverviewFragment();
Bundle args = new Bundle();
args.putInt(ARG_POSITION, itemPosition);
args.putString(ARG_POSITION, itemPosition);
fragment.setArguments(args);
return fragment;
}
@@ -55,7 +55,7 @@ public class ModDetailOverviewFragment extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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) {
if (getActivity() != null) {
KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModuleList((Modules success) -> {
Modules.Module module = success.get(mItemPos);
kvv.getModule(mItemPos, (Modules.Module module) -> {
adapter.setModule(module);
kvv.getModuleDetails(module, pair -> {
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.Modules;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
@@ -23,6 +24,7 @@ public class KVV {
private boolean isUpdating;
private ArrayList<LastTokenCallback> updatingList;
private HashMap<String, Object> addons = new HashMap<>();
private Logger log = new Logger(this);
public KVV(Context context) {
this.context = context;
@@ -61,12 +63,28 @@ public class KVV {
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) {
getModuleList(callback, error, false);
}
public void getModuleList(final NetworkCallback<Modules> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> {
log.d("token here", token);
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);

View File

@@ -66,7 +66,10 @@ public class KVVModuleList extends HTTPService {
return;
}
this.getModuleListUpgrade(success -> {
this.moduleList = success;
if (this.moduleList == null)
this.moduleList = success;
else
this.moduleList.updateList(success);
callback.onResponse(this.moduleList);
queueModuleDetails.next("list");
}, queueModuleDetails.check("list", errorCallback));
@@ -129,8 +132,8 @@ public class KVVModuleList extends HTTPService {
this.moduleList.save(context);
}
public void getModule(int index, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback, boolean forceRefresh) {
this.getModuleList(success -> callback.onResponse(success.get(index)), errorCallback, forceRefresh);
public void getModule(String id, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback, boolean 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.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Pair;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -26,7 +25,7 @@ import de.sebse.fuplanner.tools.SortedModuleList;
*/
public class Modules implements Iterable<Modules.Module>, Serializable {
private final SortedModuleList list;
private SortedModuleList list;
private String latestSemester = null;
private LoginToken token;
//private transient Logger log = new Logger(this);
@@ -86,74 +85,22 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
@NonNull
@Override
public Iterator<Module> iterator() {
return new Iterator<Module>() {
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");
}
};
return this.list.iterator();
}
public Iterator<Pair<Module, Integer>> latestSemesterIterator() {
return new Iterator<Pair<Module, Integer>>() {
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 Iterator<Module> latestSemesterIterator() {
return this.list.semesterIterator(latestSemester);
}
public int 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);
}
@@ -182,6 +129,21 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
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 final String semester;
public final HashSet<String> lvNumber;

View File

@@ -1,9 +1,13 @@
package de.sebse.fuplanner.tools;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import de.sebse.fuplanner.services.KVV.types.Modules;
@@ -23,14 +27,89 @@ public class SortedModuleList extends AbstractList<Modules.Module> implements Se
});
}
@Deprecated
@Override
public Modules.Module get(int 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
public int 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);
}
};
}
}