diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java index f033de4..1a59f34 100644 --- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java +++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java @@ -41,6 +41,7 @@ import de.sebse.fuplanner.services.KVV.KVVListener; import de.sebse.fuplanner.services.KVV.types.LoginToken; import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.tools.MainActivityListener; +import de.sebse.fuplanner.tools.NewAsyncQueue; import de.sebse.fuplanner.tools.RequestPermissionsResultListener; import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.network.NetworkCallback; @@ -77,6 +78,7 @@ public class MainActivity extends AppCompatActivity private CanteenBrowser mCanteenBrowser; private HashMap permissionListeners = new HashMap<>(); private boolean mOfflineBanner; + private NewAsyncQueue mQueue = new NewAsyncQueue(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -422,7 +424,9 @@ public class MainActivity extends AppCompatActivity }); } - private void afterAnyMenuInflate(boolean isLoggedIn) { + private void afterAnyMenuInflate(boolean isLoggedIn, Runnable done) { + int MAX_COUNT = 2; + final int[] count = {0}; if (isLoggedIn) { getKVV().modules().list().recv(success -> { int i = 0; @@ -435,7 +439,11 @@ public class MainActivity extends AppCompatActivity }); i++; } - }, log::e); + if (++count[0] == MAX_COUNT) done.run(); + }, msg -> { + if (++count[0] == MAX_COUNT) done.run(); + log.e(msg); + }); } getCanteenBrowser().getCanteens(success -> { int i = 0; @@ -447,19 +455,27 @@ public class MainActivity extends AppCompatActivity }); i++; } - }, log::e); + if (++count[0] == MAX_COUNT) done.run(); + }, msg -> { + if (++count[0] == MAX_COUNT) done.run(); + log.e(msg); + }); } private void updateNavigation() { - boolean isLoggedIn = getKVV().account().isLoggedIn(); - setNavigationHeader(isLoggedIn); - mNavigationView.getMenu().clear(); - if (isLoggedIn) - mNavigationView.inflateMenu(R.menu.activity_main_drawer_login); - else - mNavigationView.inflateMenu(R.menu.activity_main_drawer); - afterAnyMenuInflate(isLoggedIn); - setNavigationSelection(); + mQueue.add(() -> { + boolean isLoggedIn = getKVV().account().isLoggedIn(); + setNavigationHeader(isLoggedIn); + mNavigationView.getMenu().clear(); + if (isLoggedIn) + mNavigationView.inflateMenu(R.menu.activity_main_drawer_login); + else + mNavigationView.inflateMenu(R.menu.activity_main_drawer); + afterAnyMenuInflate(isLoggedIn, () -> { + setNavigationSelection(); + mQueue.next(); + }); + }); } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java index c1e32c9..3d770ea 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesAdapter.java @@ -90,7 +90,7 @@ class ModulesAdapter extends RecyclerView.Adapter { Modules.Module module = ((Modules.Module) pair.second); iHolder.mTitle.setText(module.title); StringBuilder lecturers = new StringBuilder(); - for (Lecturer lecturer : module.lecturer) { + for (Lecturer lecturer: module.lecturer) { if (!lecturer.isResponsible()) continue; if (lecturers.length() > 0) diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java index 8e95208..2edf8e0 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java @@ -16,11 +16,13 @@ import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.types.Announcement; import de.sebse.fuplanner.services.KVV.types.Assignment; import de.sebse.fuplanner.services.KVV.types.Event; +import de.sebse.fuplanner.services.KVV.types.Lecturer; import de.sebse.fuplanner.services.KVV.types.Modules; import de.sebse.fuplanner.tools.UtilsDate; import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.ui.CustomViewHolder; import de.sebse.fuplanner.tools.ui.ItemViewHolder; +import de.sebse.fuplanner.tools.ui.MailViewHolder; import de.sebse.fuplanner.tools.ui.StringViewHolder; class ModDetailOverviewAdapter extends RecyclerView.Adapter { @@ -30,6 +32,7 @@ class ModDetailOverviewAdapter extends RecyclerView.Adapter(TYPE_HEADER, ModulePart.DESCRIPTION)); mPositionalData.add(new Pair<>(TYPE_DESCRIPTION, null)); + mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.LECTURERS)); + for (int i = 0; i < mValue.lecturer.size(); i++) { + mPositionalData.add(new Pair<>(TYPE_MAIL, ModulePart.LECTURERS+1024*i)); + } mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ANNOUNCEMENT)); addPositionalListData(getAnnounceCount(), ModulePart.ANNOUNCEMENT); mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ASSIGNMENT)); @@ -90,6 +97,10 @@ class ModDetailOverviewAdapter extends RecyclerView.Adapter { + if (mListener != null) mListener.gotoFragmentPart(section, index); + });*/ + break; + } case TYPE_SHOW_MORE: CustomViewHolder c = (CustomViewHolder) holder; c.mView.setOnClickListener(view -> { diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java index 1b6c693..bb25f62 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java @@ -8,6 +8,7 @@ class ModulePart { static final int EVENT = 4; static final int GRADEBOOK = 5; static final int RESOURCES = 6; + static final int LECTURERS = 7; private static final int[] pages = new int[]{OVERVIEW, ANNOUNCEMENT, ASSIGNMENT, GRADEBOOK, RESOURCES, EVENT}; static int getPageCount() { diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/ModulesList.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/ModulesList.java index 5af11f7..c9f5129 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/ModulesList.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/ModulesList.java @@ -10,6 +10,7 @@ import org.json.JSONObject; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.regex.MatchResult; import de.sebse.fuplanner.services.KVV.types.Lecturer; @@ -166,7 +167,7 @@ public class ModulesList extends HTTPService { lvNumbers.add(matchResult.group()); } String title = site.getString("entityTitle"); - HashSet lecturers = new HashSet<>(); + LinkedHashSet lecturers = new LinkedHashSet<>(); String kvv_lecturers = site.getJSONObject("props").optString("kvv_lecturers", null); if (kvv_lecturers != null) for (String lecturer : kvv_lecturers.split("#")) { if (lecturer.length() > 2) diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Lecturer.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Lecturer.java index c84737a..6ceb2b6 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Lecturer.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Lecturer.java @@ -4,8 +4,6 @@ import java.io.Serializable; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.sebse.fuplanner.tools.logging.Logger; - public class Lecturer implements Serializable { private final String firstName; private final String surname; diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java index 1b87e7d..9e5b6d7 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/Modules.java @@ -10,10 +10,10 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; -import java.nio.channels.SeekableByteChannel; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -33,7 +33,7 @@ public class Modules implements Iterable, Serializable { this.list = new SortedListModule(); } - public void addModule(@Nullable Semester semester, HashSet lvNumber, String title, HashSet lecturer, String type, String description, String ID) { + public void addModule(@Nullable Semester semester, HashSet lvNumber, String title, LinkedHashSet lecturer, String type, String description, String ID) { Module m = new Module(semester, lvNumber, title, lecturer, type, description, ID); this.list.add(m); } @@ -114,7 +114,7 @@ public class Modules implements Iterable, Serializable { @NotNull final HashSet lvNumber; @NotNull public final String title; @NotNull - public final HashSet lecturer; + public final ArrayList lecturer; @Nullable public final String type; @Nullable public final String description; @NotNull private final String ID; @@ -138,14 +138,14 @@ public class Modules implements Iterable, Serializable { return userPoint/maxPoint; } - private Module(@Nullable Semester semester, @NotNull HashSet lvNumber, @NotNull String title, @NotNull HashSet lecturer, @Nullable String type, @Nullable String description, @NotNull String ID) { + private Module(@Nullable Semester semester, @NotNull HashSet lvNumber, @NotNull String title, @NotNull LinkedHashSet lecturer, @Nullable String type, @Nullable String description, @NotNull String ID) { title = title.replaceAll("(.*?) (S[0-9]{2}|W[0-9/]{5})", "$1"); this.semester = semester; this.lvNumber = lvNumber; this.title = title; - this.lecturer = lecturer; + this.lecturer = new ArrayList<>(lecturer); this.type = type; this.description = description; this.ID = ID; diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/SortedListModule.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/SortedListModule.java index b3b480e..5c226f4 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/types/SortedListModule.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/types/SortedListModule.java @@ -1,7 +1,6 @@ package de.sebse.fuplanner.services.KVV.types; import androidx.annotation.Nullable; -import de.sebse.fuplanner.tools.Regex; import de.sebse.fuplanner.tools.SortedList; public class SortedListModule extends SortedList { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/EventListener.java b/app/src/main/java/de/sebse/fuplanner/tools/EventListener.java index 7e1afd2..42bbbcf 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/EventListener.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/EventListener.java @@ -1,7 +1,5 @@ package de.sebse.fuplanner.tools; -import com.google.android.gms.common.util.Function; - import java.util.HashMap; public class EventListener { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java b/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java index 96b9b00..ea82635 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/network/HTTPService.java @@ -10,7 +10,6 @@ import com.android.volley.Response; import com.android.volley.TimeoutError; import com.android.volley.VolleyError; import com.android.volley.toolbox.Volley; -import com.google.android.gms.common.util.Function; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/AnnouncementViewHolder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/AnnouncementViewHolder.java index 91694b7..d8ae17b 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/AnnouncementViewHolder.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/AnnouncementViewHolder.java @@ -1,7 +1,6 @@ package de.sebse.fuplanner.tools.ui; import android.view.View; -import android.widget.ImageView; import android.widget.TextView; import com.cunoraz.tagview.TagView; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/ListViewHolder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/ListViewHolder.java index 9c7534f..8e04b95 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/ui/ListViewHolder.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/ListViewHolder.java @@ -1,8 +1,6 @@ package de.sebse.fuplanner.tools.ui; import android.view.View; -import android.widget.ListView; -import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import de.sebse.fuplanner.R; diff --git a/app/src/main/java/de/sebse/fuplanner/tools/ui/MailViewHolder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/MailViewHolder.java new file mode 100644 index 0000000..c24b47e --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/MailViewHolder.java @@ -0,0 +1,26 @@ +package de.sebse.fuplanner.tools.ui; + +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; +import de.sebse.fuplanner.R; + +public class MailViewHolder extends StringViewHolder { + public final TextView mTitle; + public final TextView mSubLeft; + public final ImageView mIcon; + + public MailViewHolder(View view) { + super(view); + mTitle = view.findViewById(R.id.title); + mSubLeft = view.findViewById(R.id.sub_left); + mIcon = view.findViewById(R.id.icon); + } + + @Override + public String toString() { + return super.toString() + " '" + mTitle.getText() + "' '" + mSubLeft.getText() + "'"; + } +} diff --git a/app/src/main/res/drawable/ic_mail.xml b/app/src/main/res/drawable/ic_mail.xml new file mode 100644 index 0000000..6701eb8 --- /dev/null +++ b/app/src/main/res/drawable/ic_mail.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/list_all_mails.xml b/app/src/main/res/layout/list_all_mails.xml new file mode 100644 index 0000000..ce391c3 --- /dev/null +++ b/app/src/main/res/layout/list_all_mails.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 01149c9..5d99002 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -78,4 +78,6 @@ Abgabe Wintersemester %1$d/%2$d Sommersemester %1$d + Dozenten + Mail Icon \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 289dce6..a69e4ea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -86,4 +86,6 @@ Deadline Winter Semester %1$d/%2$d Summer Semester %1$d + Lecturers + Mail Icon