From 81054f07689bd4fa84ff0e9e463c257fe16adfe0 Mon Sep 17 00:00:00 2001 From: Ezerous Date: Fri, 21 Jun 2019 19:28:39 +0300 Subject: [PATCH] Uploads improvements (moved courses in resources, disabled Generate Button when needed) --- .../mthmmy/activities/AboutActivity.java | 5 +- .../mthmmy/activities/LoginActivity.java | 5 +- .../activities/board/BoardActivity.java | 9 +- .../mthmmy/activities/board/BoardAdapter.java | 3 +- .../bookmarks/BookmarksActivity.java | 11 +- .../bookmarks/BookmarksBoardFragment.java | 5 +- .../bookmarks/BookmarksTopicFragment.java | 5 +- .../downloads/DownloadsActivity.java | 12 +- .../downloads/DownloadsAdapter.java | 3 +- .../mthmmy/activities/main/MainActivity.java | 11 +- .../activities/main/forum/ForumAdapter.java | 5 +- .../activities/main/forum/ForumFragment.java | 7 +- .../activities/main/recent/RecentAdapter.java | 5 +- .../main/recent/RecentFragment.java | 7 +- .../activities/main/unread/UnreadAdapter.java | 5 +- .../main/unread/UnreadFragment.java | 9 +- .../activities/profile/ProfileActivity.java | 13 +- .../latestPosts/LatestPostsAdapter.java | 3 +- .../latestPosts/LatestPostsFragment.java | 7 +- .../profile/stats/StatsFragment.java | 3 +- .../profile/summary/SummaryFragment.java | 3 +- .../activities/settings/SettingsActivity.java | 1 + .../activities/settings/SettingsFragment.java | 5 +- .../activities/shoutbox/ShoutAdapter.java | 1 + .../activities/shoutbox/ShoutboxFragment.java | 1 + .../activities/topic/TopicActivity.java | 11 +- .../mthmmy/activities/topic/TopicAdapter.java | 15 +- .../activities/upload/UploadActivity.java | 170 ++++---- .../upload/UploadFieldsBuilderActivity.java | 383 ++---------------- .../activities/upload/UploadsCourse.java | 66 +++ .../activities/upload/UploadsHelper.java | 5 +- .../gr/thmmy/mthmmy/base/BaseApplication.java | 5 +- .../gr/thmmy/mthmmy/base/BaseFragment.java | 1 + .../thmmy/mthmmy/editorview/EditorView.java | 11 +- .../mthmmy/editorview/EmojiKeyboard.java | 5 +- .../editorview/EmojiKeyboardAdapter.java | 1 + .../editorview/FormatButtonsAdapter.java | 1 + .../java/gr/thmmy/mthmmy/model/Bookmark.java | 6 +- .../main/java/gr/thmmy/mthmmy/model/Post.java | 4 +- .../gr/thmmy/mthmmy/model/UploadFile.java | 1 + .../mthmmy/services/NotificationService.java | 7 +- .../mthmmy/services/UploadsReceiver.java | 4 +- .../thmmy/mthmmy/session/SessionManager.java | 5 +- .../utils/AppCompatSpinnerWithoutDefault.java | 4 +- .../utils/CustomLinearLayoutManager.java | 1 + .../java/gr/thmmy/mthmmy/utils/FileUtils.java | 3 +- .../mthmmy/utils/ScrollAwareFABBehavior.java | 1 - .../utils/ScrollAwareLinearBehavior.java | 4 +- .../java/gr/thmmy/mthmmy/utils/TakePhoto.java | 3 +- .../mthmmy/utils/ToggledBackgroundButton.java | 27 ++ .../mthmmy/utils/parsing/ParseHelpers.java | 2 +- .../thmmy/mthmmy/viewmodel/BaseViewModel.java | 1 + .../mthmmy/viewmodel/ShoutboxViewModel.java | 1 + .../mthmmy/viewmodel/TopicViewModel.java | 3 +- app/src/main/res/layout/activity_upload.xml | 2 +- app/src/main/res/values/uploads_courses.xml | 153 +++++++ 56 files changed, 516 insertions(+), 534 deletions(-) create mode 100644 app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsCourse.java create mode 100644 app/src/main/java/gr/thmmy/mthmmy/utils/ToggledBackgroundButton.java create mode 100644 app/src/main/res/values/uploads_courses.xml diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/AboutActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/AboutActivity.java index 77a6aebd..0963be99 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/AboutActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/AboutActivity.java @@ -14,11 +14,12 @@ import android.widget.FrameLayout; import android.widget.ScrollView; import android.widget.TextView; -import com.google.android.material.appbar.AppBarLayout; - import androidx.appcompat.app.AlertDialog; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.drawerlayout.widget.DrawerLayout; + +import com.google.android.material.appbar.AppBarLayout; + import gr.thmmy.mthmmy.BuildConfig; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/LoginActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/LoginActivity.java index 29ab9b1b..a24209e5 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/LoginActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/LoginActivity.java @@ -10,10 +10,11 @@ import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.Toast; -import com.google.firebase.analytics.FirebaseAnalytics; - import androidx.appcompat.widget.AppCompatButton; import androidx.preference.PreferenceManager; + +import com.google.firebase.analytics.FirebaseAnalytics; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.main.MainActivity; import gr.thmmy.mthmmy.base.BaseActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java index 0effdaa3..6f3cea60 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java @@ -8,6 +8,11 @@ import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.google.android.material.floatingactionbutton.FloatingActionButton; import org.jsoup.nodes.Document; @@ -17,10 +22,6 @@ import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.Objects; -import androidx.appcompat.app.AlertDialog; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.LoginActivity; import gr.thmmy.mthmmy.activities.create_content.CreateContentActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardAdapter.java index 6c5e50db..2e864229 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardAdapter.java @@ -12,10 +12,11 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import java.util.Objects; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.topic.TopicActivity; import gr.thmmy.mthmmy.model.Board; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java index b42a8caf..3a00881c 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java @@ -4,16 +4,17 @@ import android.content.Intent; import android.os.Bundle; import android.widget.Toast; -import com.google.android.material.tabs.TabLayout; - -import java.util.ArrayList; -import java.util.List; - import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.ViewPager; + +import com.google.android.material.tabs.TabLayout; + +import java.util.ArrayList; +import java.util.List; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.board.BoardActivity; import gr.thmmy.mthmmy.activities.topic.TopicActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksBoardFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksBoardFragment.java index 5b8c8d01..814586ea 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksBoardFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksBoardFragment.java @@ -12,11 +12,12 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; -import java.util.ArrayList; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; + +import java.util.ArrayList; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.model.Bookmark; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksTopicFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksTopicFragment.java index 4316db4b..e9081fbd 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksTopicFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksTopicFragment.java @@ -12,11 +12,12 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; -import java.util.ArrayList; - import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; + +import java.util.ArrayList; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.model.Bookmark; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java index e4c3676c..95e0334c 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsActivity.java @@ -10,6 +10,12 @@ import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; @@ -17,12 +23,6 @@ import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.Objects; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.google.android.material.floatingactionbutton.FloatingActionButton; - import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.upload.UploadActivity; import gr.thmmy.mthmmy.base.BaseActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsAdapter.java index 5b6ec26e..d5ca46ad 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/downloads/DownloadsAdapter.java @@ -12,12 +12,13 @@ import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Objects; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; import gr.thmmy.mthmmy.model.Download; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java index af1a4cf2..b102c7f7 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/MainActivity.java @@ -7,11 +7,6 @@ import android.os.Build; import android.os.Bundle; import android.widget.Toast; -import com.google.android.material.tabs.TabLayout; - -import java.util.ArrayList; -import java.util.List; - import androidx.appcompat.app.AppCompatDelegate; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -19,6 +14,12 @@ import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; + +import com.google.android.material.tabs.TabLayout; + +import java.util.ArrayList; +import java.util.List; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.LoginActivity; import gr.thmmy.mthmmy.activities.board.BoardActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumAdapter.java index 718c1b8d..d7ab706a 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumAdapter.java @@ -6,14 +6,15 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import com.bignerdranch.expandablerecyclerview.ChildViewHolder; import com.bignerdranch.expandablerecyclerview.ExpandableRecyclerAdapter; import com.bignerdranch.expandablerecyclerview.ParentViewHolder; import java.util.List; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.Board; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumFragment.java index 70e78af5..f366f295 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/forum/ForumFragment.java @@ -9,6 +9,10 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import com.bignerdranch.expandablerecyclerview.ExpandableRecyclerAdapter; import org.jsoup.nodes.Document; @@ -19,9 +23,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; import gr.thmmy.mthmmy.base.BaseApplication; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentAdapter.java index 31871069..15589d45 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentAdapter.java @@ -6,10 +6,11 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import java.util.List; - import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.TopicSummary; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java index 6c194c0e..4f4517d1 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java @@ -9,6 +9,10 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import org.jsoup.nodes.Document; import org.jsoup.select.Elements; @@ -17,9 +21,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.TopicSummary; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadAdapter.java index 8810da1a..3818145a 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadAdapter.java @@ -5,10 +5,11 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import java.util.List; - import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.TopicSummary; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java index 0c47bac5..cec14e97 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/unread/UnreadFragment.java @@ -10,6 +10,11 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; @@ -18,10 +23,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.TopicSummary; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/ProfileActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/ProfileActivity.java index 38181f46..e3425c3c 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/ProfileActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/ProfileActivity.java @@ -18,6 +18,13 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.res.ResourcesCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; import com.squareup.picasso.Picasso; @@ -31,12 +38,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.content.res.ResourcesCompat; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.profile.latestPosts.LatestPostsFragment; import gr.thmmy.mthmmy.activities.profile.stats.StatsFragment; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsAdapter.java index 6054a05f..d2a4d1cb 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsAdapter.java @@ -8,9 +8,10 @@ import android.webkit.WebView; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseFragment; import gr.thmmy.mthmmy.model.PostSummary; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsFragment.java index f2c17ff2..59fa6421 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/latestPosts/LatestPostsFragment.java @@ -8,6 +8,10 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -17,9 +21,6 @@ import java.util.ArrayList; import javax.net.ssl.SSLHandshakeException; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; import gr.thmmy.mthmmy.base.BaseFragment; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/stats/StatsFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/stats/StatsFragment.java index 8ecf48bd..a0b3dafc 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/stats/StatsFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/stats/StatsFragment.java @@ -12,6 +12,8 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.fragment.app.Fragment; + import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.AxisBase; @@ -37,7 +39,6 @@ import java.util.List; import javax.net.ssl.SSLHandshakeException; -import androidx.fragment.app.Fragment; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; import me.zhanghai.android.materialprogressbar.MaterialProgressBar; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java index 2d4ba9bf..4df4598f 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java @@ -13,6 +13,8 @@ import android.webkit.WebView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.fragment.app.Fragment; + import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -21,7 +23,6 @@ import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.Objects; -import androidx.fragment.app.Fragment; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.utils.parsing.ParseHelpers; import timber.log.Timber; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsActivity.java index a884d3a6..c9637dd0 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsActivity.java @@ -3,6 +3,7 @@ package gr.thmmy.mthmmy.activities.settings; import android.os.Bundle; import androidx.fragment.app.FragmentTransaction; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsFragment.java index a66f91ae..ec5907b6 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/settings/SettingsFragment.java @@ -11,12 +11,13 @@ import android.provider.Settings; import android.view.View; import android.widget.Toast; -import java.util.ArrayList; - import androidx.annotation.NonNull; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; + +import java.util.ArrayList; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseApplication; import timber.log.Timber; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutAdapter.java index 82a3389e..9976975e 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutAdapter.java @@ -16,6 +16,7 @@ import android.webkit.WebViewClient; import android.widget.TextView; import androidx.annotation.NonNull; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.board.BoardActivity; import gr.thmmy.mthmmy.activities.profile.ProfileActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java index 35d86faf..ad42a414 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java @@ -16,6 +16,7 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseApplication; import gr.thmmy.mthmmy.editorview.EditorView; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java index 639ab3c7..d3d97663 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java @@ -28,16 +28,17 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.snackbar.Snackbar; - -import java.util.ArrayList; - import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.res.ResourcesCompat; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; + +import java.util.ArrayList; + import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.topic.tasks.EditTask; import gr.thmmy.mthmmy.activities.topic.tasks.PrepareForEditTask; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java index 5472a742..0e885cc3 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java @@ -39,6 +39,14 @@ import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.appcompat.widget.AppCompatButton; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.RecyclerView; + import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; @@ -53,13 +61,6 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.appcompat.widget.AppCompatButton; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.ViewModelProviders; -import androidx.recyclerview.widget.RecyclerView; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.board.BoardActivity; import gr.thmmy.mthmmy.activities.profile.ProfileActivity; diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java index 67f612e3..31f51b8e 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -53,6 +54,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.Locale; import java.util.UUID; @@ -71,7 +73,9 @@ import me.zhanghai.android.materialprogressbar.MaterialProgressBar; import timber.log.Timber; import static gr.thmmy.mthmmy.activities.settings.SettingsActivity.UPLOADING_APP_SIGNATURE_ENABLE_KEY; -import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.BUNDLE_UPLOAD_FIELD_BUILDER_COURSE; +import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_GREEKLISH_NAME; +import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_MINIFIED_NAME; +import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_NAME; import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.BUNDLE_UPLOAD_FIELD_BUILDER_SEMESTER; import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.RESULT_DESCRIPTION; import static gr.thmmy.mthmmy.activities.upload.UploadFieldsBuilderActivity.RESULT_FILENAME; @@ -84,7 +88,7 @@ public class UploadActivity extends BaseActivity { */ public static final String BUNDLE_UPLOAD_CATEGORY = "UPLOAD_CATEGORY"; private static final String uploadIndexUrl = "https://www.thmmy.gr/smf/index.php?action=tpmod;dl=upload"; - private static final String uploadedFromThmmyPromptHtml = "
uploaded from mTHMMY"; + private static final String uploadedFromTHMMYPromptHtml = "
uploaded from mTHMMY"; /** * Request codes used in activities for result (AFR) calls */ @@ -100,12 +104,15 @@ public class UploadActivity extends BaseActivity { private static final int MAX_FILE_SIZE_SUPPORTED = 45000000; - //private UploadsReceiver uploadsReceiver = new UploadsReceiver(); + private HashMap uploadsCourses; + private ArrayList uploadRootCategories = new ArrayList<>(); private ParseUploadPageTask parseUploadPageTask; private ArrayList bundleCategory; private String categorySelected = "-1"; private String uploaderProfileIndex = "1"; + private UploadsCourse uploadsCourse; + private String semester = ""; private ArrayList filesList = new ArrayList<>(); private File photoFileCreated = null; @@ -168,64 +175,19 @@ public class UploadActivity extends BaseActivity { rootCategorySpinner.setOnItemSelectedListener(new CustomOnItemSelectedListener(uploadRootCategories)); titleDescriptionBuilderButton = findViewById(R.id.upload_title_description_builder); + titleDescriptionBuilderButton.setEnabled(false); titleDescriptionBuilderButton.setOnClickListener(view -> { - if (categorySelected.equals("-1")) { - Toast.makeText(view.getContext(), "Please choose a category first", Toast.LENGTH_SHORT).show(); - return; - } - - int numberOfSpinners = categoriesSpinners.getChildCount(); - - if (numberOfSpinners < 3) { - Toast.makeText(view.getContext(), "Please choose a course category", Toast.LENGTH_SHORT).show(); - return; - } - - String maybeSemester = "", maybeCourse = ""; - - if (numberOfSpinners == 5) { - if (((AppCompatSpinnerWithoutDefault) categoriesSpinners.getChildAt(numberOfSpinners - 1)). - getSelectedItemPosition() == -1) { - maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 4)).getSelectedItem(); - maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 2)).getSelectedItem(); - } else { - Toast.makeText(view.getContext(), "Please choose a course category", Toast.LENGTH_SHORT).show(); - } - } else if (numberOfSpinners == 4) { - maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 3)).getSelectedItem(); - maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 1)).getSelectedItem(); - } else { - maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 2)).getSelectedItem(); - maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) - categoriesSpinners.getChildAt(numberOfSpinners - 1)).getSelectedItem(); - } - - if (!maybeSemester.contains("εξάμηνο") && !maybeSemester.contains("Εξάμηνο")) { - Toast.makeText(view.getContext(), "Please choose a course category", Toast.LENGTH_SHORT).show(); - return; + if(uploadsCourse!=null && !uploadsCourse.getName().equals("") && !semester.equals("")){ + Intent intent = new Intent(UploadActivity.this, UploadFieldsBuilderActivity.class); + Bundle builderExtras = new Bundle(); + builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_NAME, uploadsCourse.getName()); + builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_MINIFIED_NAME, uploadsCourse.getMinifiedName()); + builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_GREEKLISH_NAME, uploadsCourse.getGreeklishName()); + builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_SEMESTER, semester); + intent.putExtras(builderExtras); + startActivityForResult(intent, AFR_REQUEST_CODE_FIELDS_BUILDER); } - if (maybeCourse == null) { - Toast.makeText(view.getContext(), "Please choose a course", Toast.LENGTH_SHORT).show(); - return; - } - - //Fixes course and semester - String course = maybeCourse.replaceAll("-", "").replace("(ΝΠΣ)", "").trim(); - String semester = maybeSemester.replaceAll("-", "").trim().substring(0, 1); - - Intent intent = new Intent(UploadActivity.this, UploadFieldsBuilderActivity.class); - Bundle builderExtras = new Bundle(); - builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE, course); - builderExtras.putString(BUNDLE_UPLOAD_FIELD_BUILDER_SEMESTER, semester); - intent.putExtras(builderExtras); - startActivityForResult(intent, AFR_REQUEST_CODE_FIELDS_BUILDER); }); - titleDescriptionBuilderButton.setEnabled(false); uploadTitle = findViewById(R.id.upload_title); uploadDescription = findViewById(R.id.upload_description); @@ -343,7 +305,7 @@ public class UploadActivity extends BaseActivity { //Checks settings and possibly adds "Uploaded from mTHMMY" string to description SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(view.getContext()); if (sharedPrefs.getBoolean(UPLOADING_APP_SIGNATURE_ENABLE_KEY, true)) { - uploadDescriptionText[0] += uploadedFromThmmyPromptHtml; + uploadDescriptionText[0] += uploadedFromTHMMYPromptHtml; } for (UploadFile file : filesList) { @@ -450,6 +412,10 @@ public class UploadActivity extends BaseActivity { updateUIElements(); titleDescriptionBuilderButton.setEnabled(true); } + + Resources res = getResources(); + uploadsCourses = new HashMap<>(UploadsCourse + .generateUploadsCourses(res.getStringArray(R.array.string_array_uploads_courses))); } @Override @@ -493,7 +459,7 @@ public class UploadActivity extends BaseActivity { if (!hasModifiedFilename) { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date()); - String zipFilename = "mThmmy_" + timeStamp + ".zip"; + String zipFilename = "mTHMMY_" + timeStamp + ".zip"; uploadFilename.setText(zipFilename); hasModifiedFilename = false; } @@ -542,7 +508,7 @@ public class UploadActivity extends BaseActivity { if (!hasModifiedFilename) { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date()); - String zipFilename = "mThmmy_" + timeStamp + ".zip"; + String zipFilename = "mTHMMY_" + timeStamp + ".zip"; uploadFilename.setText(zipFilename); hasModifiedFilename = false; } @@ -574,7 +540,7 @@ public class UploadActivity extends BaseActivity { if (!hasModifiedFilename) { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date()); - String zipFilename = "mThmmy_" + timeStamp + ".zip"; + String zipFilename = "mTHMMY_" + timeStamp + ".zip"; uploadFilename.setText(zipFilename); hasModifiedFilename = false; } @@ -881,6 +847,7 @@ public class UploadActivity extends BaseActivity { } categorySelected = parentCategories.get(position).getValue(); + setCourseAndSemester(); //Adds new sub-category spinner if (parentCategories.get(position).hasSubCategories()) { @@ -924,7 +891,72 @@ public class UploadActivity extends BaseActivity { } @Override - public void onNothingSelected(AdapterView parent) { + public void onNothingSelected(AdapterView parent) { } + + private void setCourseAndSemester(){ + uploadsCourse = null; + semester = ""; + + if (categorySelected.equals("-1")) { + titleDescriptionBuilderButton.setEnabled(false); + return; + } + + int numberOfSpinners = categoriesSpinners.getChildCount(); + + if (numberOfSpinners < 3) { + titleDescriptionBuilderButton.setEnabled(false); + return; + } + + String maybeSemester = ""; + String maybeCourse = ""; + + if (numberOfSpinners == 5) { + if (((AppCompatSpinnerWithoutDefault) categoriesSpinners.getChildAt(numberOfSpinners - 1)). + getSelectedItemPosition() == -1) { + maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 4)).getSelectedItem(); + maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 2)).getSelectedItem(); + } + else return; + } else if (numberOfSpinners == 4) { + maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 3)).getSelectedItem(); + maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 1)).getSelectedItem(); + } else { + maybeSemester = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 2)).getSelectedItem(); + maybeCourse = (String) ((AppCompatSpinnerWithoutDefault) + categoriesSpinners.getChildAt(numberOfSpinners - 1)).getSelectedItem(); + } + + if (!maybeSemester.contains("εξάμηνο") && !maybeSemester.contains("Εξάμηνο")) { + titleDescriptionBuilderButton.setEnabled(false); + return; + } + + if (maybeCourse == null) { + titleDescriptionBuilderButton.setEnabled(false); + return; + } + + String retrievedCourse = maybeCourse.replaceAll("-", "").replace("(ΝΠΣ)", "").trim(); + String retrievedSemester = maybeSemester.replaceAll("-", "").trim().substring(0, 1); + + UploadsCourse foundUploadsCourse = UploadsCourse.findCourse(retrievedCourse, uploadsCourses); + + if(foundUploadsCourse != null){ + uploadsCourse = foundUploadsCourse; + semester = retrievedSemester; + Timber.i("Selected course: %s, semester: %s", uploadsCourse.getName(), semester); + titleDescriptionBuilderButton.setEnabled(true); + return; + } + + titleDescriptionBuilderButton.setEnabled(false); } } @@ -987,7 +1019,6 @@ public class UploadActivity extends BaseActivity { @Override protected void postExecution(ResultCode result) { updateUIElements(); - titleDescriptionBuilderButton.setEnabled(true); progressBar.setVisibility(ProgressBar.GONE); } } @@ -1032,14 +1063,14 @@ public class UploadActivity extends BaseActivity { @Override protected Boolean doInBackground(Uri... filesToZip) { - if (weakActivity == null || zipFilename == null) { + if (weakActivity == null || zipFilename == null) return false; - } + File zipFile = UploadsHelper.createZipFile(zipFilename); - if (zipFile == null) { + if (zipFile == null) return false; - } + zipFileUri = FileProvider.getUriForFile(weakActivity.get(), weakActivity.get().getPackageName() + ".provider", zipFile); @@ -1050,9 +1081,8 @@ public class UploadActivity extends BaseActivity { @Override protected void onPostExecute(Boolean result) { - if (weakActivity == null) { + if (weakActivity == null) return; - } if (!result) { Toast.makeText(weakActivity.get(), "Couldn't create zip!", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadFieldsBuilderActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadFieldsBuilderActivity.java index ebf221f6..ffa6f26e 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadFieldsBuilderActivity.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadFieldsBuilderActivity.java @@ -3,7 +3,6 @@ package gr.thmmy.mthmmy.activities.upload; import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import androidx.annotation.Nullable; import android.text.Editable; import android.text.TextWatcher; import android.view.View; @@ -12,23 +11,26 @@ import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.Toast; +import androidx.annotation.Nullable; + import java.util.Calendar; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.base.BaseActivity; import timber.log.Timber; public class UploadFieldsBuilderActivity extends BaseActivity { - static final String BUNDLE_UPLOAD_FIELD_BUILDER_COURSE = "UPLOAD_FIELD_BUILDER_COURSE"; + + static final String BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_NAME = "BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_NAME"; + static final String BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_MINIFIED_NAME = "BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_MINIFIED_NAME"; + static final String BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_GREEKLISH_NAME = "BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_GREEKLISH_NAME"; static final String BUNDLE_UPLOAD_FIELD_BUILDER_SEMESTER = "UPLOAD_FIELD_BUILDER_SEMESTER"; static final String RESULT_FILENAME = "RESULT_FILENAME"; static final String RESULT_TITLE = "RESULT_TITLE"; static final String RESULT_DESCRIPTION = "RESULT_DESCRIPTION"; - private String course, semester; + private String courseName, courseMinifiedName, courseGreeklishName, semester; private boolean isValidYear; private LinearLayout semesterChooserLinear; @@ -46,25 +48,20 @@ public class UploadFieldsBuilderActivity extends BaseActivity { int inputYear = Integer.parseInt(working); isValidYear = inputYear <= currentYear && inputYear > 1980; - } else { + } else isValidYear = false; - } - if (!isValidYear) { + if (!isValidYear) year.setError("Please enter a valid year"); - } else { + else year.setError(null); - } - } @Override - public void afterTextChanged(Editable s) { - } + public void afterTextChanged(Editable s) { } @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } + public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }; @Override @@ -74,9 +71,11 @@ public class UploadFieldsBuilderActivity extends BaseActivity { Bundle extras = getIntent().getExtras(); if (extras != null) { - course = extras.getString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE); + courseName = extras.getString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_NAME); + courseMinifiedName = extras.getString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_MINIFIED_NAME); + courseGreeklishName = extras.getString(BUNDLE_UPLOAD_FIELD_BUILDER_COURSE_GREEKLISH_NAME); semester = extras.getString(BUNDLE_UPLOAD_FIELD_BUILDER_SEMESTER); - if (course == null || course.equals("") || semester == null || semester.equals("")) { + if (courseName == null || courseName.equals("") || semester == null || semester.equals("")) { Toast.makeText(this, "Something went wrong!", Toast.LENGTH_SHORT).show(); Timber.e("Bundle came empty in %s", UploadFieldsBuilderActivity.class.getSimpleName()); @@ -143,11 +142,11 @@ public class UploadFieldsBuilderActivity extends BaseActivity { private String buildFilename() { switch (typeRadio.getCheckedRadioButtonId()) { case R.id.upload_fields_builder_radio_button_exams: - return getGreeklishCourseName() + "_" + getGreeklishPeriod() + "_" + year.getText().toString(); + return courseGreeklishName + "_" + getGreeklishPeriod() + "_" + year.getText().toString(); case R.id.upload_fields_builder_radio_button_exam_solutions: - return getGreeklishCourseName() + "_" + getGreeklishPeriod() + "_" + year.getText().toString() + "_Lyseis"; + return courseGreeklishName + "_" + getGreeklishPeriod() + "_" + year.getText().toString() + "_Lyseis"; case R.id.upload_fields_builder_radio_button_notes: - return getGreeklishCourseName() + "_" + year.getText().toString() + "_Shmeiwseis"; + return courseGreeklishName + "_" + year.getText().toString() + "_Simeioseis"; default: return null; } @@ -157,11 +156,11 @@ public class UploadFieldsBuilderActivity extends BaseActivity { private String buildTitle() { switch (typeRadio.getCheckedRadioButtonId()) { case R.id.upload_fields_builder_radio_button_exams: - return getMinifiedCourseName() + " - " + "Θέματα εξετάσεων " + getPeriod() + " " + year.getText().toString(); + return courseMinifiedName + " - " + "Θέματα εξετάσεων " + getPeriod() + " " + year.getText().toString(); case R.id.upload_fields_builder_radio_button_exam_solutions: - return getMinifiedCourseName() + " - " + "Λύσεις θεμάτων " + getPeriod() + " " + year.getText().toString(); + return courseMinifiedName + " - " + "Λύσεις θεμάτων " + getPeriod() + " " + year.getText().toString(); case R.id.upload_fields_builder_radio_button_notes: - return getMinifiedCourseName() + " - " + "Σημειώσεις παραδόσεων " + year.getText().toString(); + return courseMinifiedName + " - " + "Σημειώσεις παραδόσεων " + year.getText().toString(); default: return null; } @@ -170,11 +169,11 @@ public class UploadFieldsBuilderActivity extends BaseActivity { private String buildDescription() { switch (typeRadio.getCheckedRadioButtonId()) { case R.id.upload_fields_builder_radio_button_exams: - return "Θέματα εξετάσεων " + getPeriod() + " " + year.getText().toString() + " του μαθήματος \"" + course + "\""; + return "Θέματα εξετάσεων " + getPeriod() + " " + year.getText().toString() + " του μαθήματος \"" + courseName + "\""; case R.id.upload_fields_builder_radio_button_exam_solutions: - return "Λύσεις των θεμάτων των εξετάσεων " + getPeriod() + " " + year.getText().toString() + " του μαθήματος \"" + course + "\""; + return "Λύσεις των θεμάτων των εξετάσεων " + getPeriod() + " " + year.getText().toString() + " του μαθήματος \"" + courseName + "\""; case R.id.upload_fields_builder_radio_button_notes: - return "Σημειώσεις των παραδόσεων του μαθήματος \"" + course + "\" από το " + year.getText().toString(); + return "Σημειώσεις των παραδόσεων του μαθήματος \"" + courseName + "\" από το " + year.getText().toString(); default: return null; } @@ -205,336 +204,4 @@ public class UploadFieldsBuilderActivity extends BaseActivity { return null; } } - - @Nullable - private String getGreeklishCourseName() { - return getGreeklishOrMinifiedCourseName(true); - } - - @Nullable - private String getMinifiedCourseName() { - return getGreeklishOrMinifiedCourseName(false); - } - - private String normalizeLatinNumbers(String stringWithLatinNumbers) { - String greekLatinOne = "Ι", englishLatinOne = "I"; - String normalisedString; - - //Separates the latin number suffix from the course name - final String regex = "(.+)\\ ([IΙ]+)"; - final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE); - final Matcher matcher = pattern.matcher(stringWithLatinNumbers); - - if (matcher.matches() && matcher.groupCount() == 2) { - normalisedString = matcher.group(1) + " " + matcher.group(2).replaceAll(greekLatinOne, englishLatinOne); - } else { - normalisedString = stringWithLatinNumbers; - } - - return normalisedString; - } - - @Nullable - private String getGreeklishOrMinifiedCourseName(boolean greeklish) { - String normalisedCourse = normalizeLatinNumbers(course); - - if (normalisedCourse.contains(("Ψηφιακή Επεξεργασία Σήματος"))) { - return greeklish ? "PSES" : "ΨΕΣ"; - } else if (normalisedCourse.contains(("Ψηφιακή Επεξεργασία Εικόνας"))) { - return greeklish ? "psee" : "ΨΕΕ"; - } else if (normalisedCourse.contains(("Ψηφιακές Τηλεπικοινωνίες II"))) { - return greeklish ? "pshf_thlep_II" : "Ψηφιακές Τηλεπ. 2"; - } else if (normalisedCourse.contains(("Ψηφιακές Τηλεπικοινωνίες I"))) { - return greeklish ? "pshf_thlep_I" : "Ψηφιακές Τηλεπ. 1"; - } else if (normalisedCourse.contains(("Ψηφιακά Φίλτρα"))) { - return greeklish ? "filtra" : "Φίλτρα"; - } else if (normalisedCourse.contains(("Ψηφιακά Συστήματα III"))) { - return greeklish ? "pshfiaka_III" : "Ψηφιακά 3"; - } else if (normalisedCourse.contains(("Ψηφιακά Συστήματα II"))) { - return greeklish ? "pshfiaka_II" : "Ψηφιακά 2"; - } else if (normalisedCourse.contains(("Ψηφιακά Συστήματα I"))) { - return greeklish ? "pshfiaka_I" : "Ψηφιακά 1"; - } else if (normalisedCourse.contains(("Φωτονική Τεχνολογία"))) { - return greeklish ? "fwtonikh" : "Φωτονική"; - } else if (normalisedCourse.contains(("Φυσική I"))) { - return greeklish ? "fysikh_I" : "Φυσική 1"; - } else if (normalisedCourse.contains(("Υψηλές Τάσεις III"))) { - return greeklish ? "ypshles_III" : "Υψηλές 3"; - } else if (normalisedCourse.contains(("Υψηλές Τάσεις II"))) { - return greeklish ? "ypshles_II" : "Υψηλές 2"; - } else if (normalisedCourse.contains(("Υψηλές Τάσεις I"))) { - return greeklish ? "ypshles_I" : "Υψηλές 1"; - } else if (normalisedCourse.contains(("Υψηλές Τάσεις 4"))) { - return greeklish ? "ypshles_IV" : "Υψηλές 4"; - } else if (normalisedCourse.contains(("Υπολογιστικός Ηλεκτρομαγνητισμός"))) { - return greeklish ? "ypologistikos_HM" : "Υπολογιστικός Η/Μ"; - } else if (normalisedCourse.contains(("Υπολογιστικές Μέθοδοι στα Ενεργειακά Συστήματα"))) { - return greeklish ? "ymes" : "ΥΜΕΣ"; - } else if (normalisedCourse.contains(("Τηλεπικοινωνιακή Ηλεκτρονική"))) { - return greeklish ? "tilep_ilektr" : "Τηλεπ. Ηλεκτρ."; - } else if (normalisedCourse.contains(("Τηλεοπτικά Συστήματα"))) { - return greeklish ? "tileoptika" : "Τηλεοπτικά"; - } else if (normalisedCourse.contains(("Τεχνολογία Λογισμικού"))) { - return greeklish ? "SE" : "Τεχνολογία Λογισμικού"; - } else if (normalisedCourse.contains(("Τεχνολογία Ηλεκτροτεχνικών Υλικών"))) { - return greeklish ? "Hlektrotexnika_Ylika" : "Ηλεκτροτεχνικά Υλικά"; - } else if (normalisedCourse.contains(("Τεχνολογία Ήχου και Εικόνας"))) { - return greeklish ? "texn_hxoy_eikonas" : "Τεχνολογία Ήχου και Εικόνας"; - } else if (normalisedCourse.contains(("Τεχνική Μηχανική"))) { - return greeklish ? "texn_mhxan" : "Τεχν. Μηχαν."; - } else if (normalisedCourse.contains(("Τεχνικές μη Καταστρεπτικών Δοκιμών"))) { - return greeklish ? "non_destructive_tests" : "Μη Καταστρεπτικές Δοκιμές"; - } else if (normalisedCourse.contains(("Τεχνικές Σχεδίασης με Η/Υ"))) { - return greeklish ? "sxedio" : "Σχέδιο"; - } else if (normalisedCourse.contains(("Τεχνικές Κωδικοποίησης"))) { - return greeklish ? "texn_kwdikopoihshs" : "Τεχνικές Κωδικοποίησης"; - } else if (normalisedCourse.contains(("Τεχνικές Βελτιστοποίησης"))) { - return greeklish ? "veltistopoihsh" : "Βελτιστοποίηση"; - } else if (normalisedCourse.contains(("Σύνθεση Τηλεπικοινωνιακών Διατάξεων"))) { - return greeklish ? "synth_thlep_diataksewn" : "Σύνθεση Τηλεπ. Διατάξεων"; - } else if (normalisedCourse.contains(("Σύνθεση Ενεργών και Παθητικών Κυκλωμάτων"))) { - return greeklish ? "synthesh" : "Σύνθεση"; - } else if (normalisedCourse.contains(("Σχεδίαση Συστημάτων VLSI"))) { - return greeklish ? "VLSI" : "VLSI"; - } else if (normalisedCourse.contains(("Συστήματα Υπολογιστών (Υπολογιστικά Συστήματα)"))) { - return greeklish ? "sys_ypologistwn" : "Συσ. Υπολογιστών"; - } else if (normalisedCourse.contains(("Συστήματα Πολυμέσων και Εικονική Πραγματικότητα"))) { - return greeklish ? "polymesa" : "Πολυμέσα"; - } else if (normalisedCourse.contains(("Συστήματα Μικροϋπολογιστών"))) { - return greeklish ? "mikro_I" : "Μίκρο 1"; - } else if (normalisedCourse.contains(("Συστήματα Ηλεκτροκίνησης"))) { - return greeklish ? "hlektrokinhsh" : "Ηλεκτροκίνηση"; - } else if (normalisedCourse.contains(("Συστήματα Ηλεκτρικής Ενέργειας III"))) { - return greeklish ? "SHE_III" : "ΣΗΕ 3"; - } else if (normalisedCourse.contains(("Συστήματα Ηλεκτρικής Ενέργειας II"))) { - return greeklish ? "SHE_II" : "ΣΗΕ 2"; - } else if (normalisedCourse.contains(("Συστήματα Ηλεκτρικής Ενέργειας I"))) { - return greeklish ? "SHE_I" : "ΣΗΕ 1"; - } else if (normalisedCourse.contains(("Συστήματα Αυτομάτου Ελέγχου III"))) { - return greeklish ? "SAE_III" : "ΣΑΕ 3"; - } else if (normalisedCourse.contains(("Συστήματα Αυτομάτου Ελέγχου II"))) { - return greeklish ? "SAE_II" : "ΣΑΕ 2"; - } else if (normalisedCourse.contains(("Συστήματα Αυτομάτου Ελέγχου I"))) { - return greeklish ? "SAE_1" : "ΣΑΕ 1"; - } else if (normalisedCourse.contains(("Στοχαστικό Σήμα"))) { - return greeklish ? "stox_shma" : "Στοχ. Σήμα"; - } else if (normalisedCourse.contains(("Σταθμοί Παραγωγής Ηλεκτρικής Ενέργειας"))) { - return greeklish ? "SPHE" : "ΣΠΗΕ"; - } else if (normalisedCourse.contains(("Σερβοκινητήρια Συστήματα"))) { - return greeklish ? "servo" : "Σέρβο"; - } else if (normalisedCourse.contains(("Σήματα και Συστήματα"))) { - return greeklish ? "analog_shma" : "Σύματα & Συστήματα"; - } else if (normalisedCourse.contains(("Ρομποτική"))) { - return greeklish ? "rompotikh" : "Ρομποτική"; - } else if (normalisedCourse.contains(("Προσομοίωση και Μοντελοποίηση Συστημάτων"))) { - return greeklish ? "montelopoihsh" : "Μοντελοποίηση"; - } else if (normalisedCourse.contains(("Προηγμένες Τεχνικές Επεξεργασίας Σήματος"))) { - return greeklish ? "ptes" : "ΠΤΕΣ"; - } else if (normalisedCourse.contains(("Προγραμματιστικές Τεχνικές"))) { - return greeklish ? "cpp" : "Προγραμματ. Τεχν."; - } else if (normalisedCourse.contains(("Προγραμματιζόμενα Κυκλώματα ASIC"))) { - return greeklish ? "asic" : "ASIC"; - } else if (normalisedCourse.contains(("Παράλληλα και Κατανεμημένα Συστήματα"))) { - return greeklish ? "parallhla" : "Παράλληλα"; - } else if (normalisedCourse.contains(("Οργάνωση και Διοίκηση Εργοστασίων"))) { - return greeklish ? "organ_dioik_ergostasiwn" : "Οργάνωση και Διοίκηση Εργοστασίων"; - } else if (normalisedCourse.contains(("Οργάνωση Υπολογιστών"))) { - return greeklish ? "org_ypol" : "Οργάνωση Υπολ."; - } else if (normalisedCourse.contains(("Οπτική II"))) { - return greeklish ? "optikh_II" : "Οπτική 2"; - } else if (normalisedCourse.contains(("Οπτική I"))) { - return greeklish ? "optikh_I" : "Οπτική 1"; - } else if (normalisedCourse.contains(("Οπτικές Επικοινωνίες"))) { - return greeklish ? "optikes_thlep" : "Οπτικές Τηλεπ."; - } else if (normalisedCourse.contains(("Μικροκύματα II"))) { - return greeklish ? "mikrokymata_II" : "Μικροκύματα 2"; - } else if (normalisedCourse.contains(("Μικροκύματα I"))) { - return greeklish ? "mikrokymata_I" : "Μικροκύματα 1"; - } else if (normalisedCourse.contains(("Μικροκυματική Τηλεπισκόπηση"))) { - return greeklish ? "thlepiskophsh" : "Τηλεπισκόπηση"; - } else if (normalisedCourse.contains(("Μικροεπεξεργαστές και Περιφερειακά"))) { - return greeklish ? "mikro_II" : "Μίκρο 2"; - } else if (normalisedCourse.contains(("Μετάδοση Θερμότητας"))) { - return greeklish ? "metadosi_therm" : "Μετάδοση Θερμ."; - } else if (normalisedCourse.contains(("Λογισμός II"))) { - return greeklish ? "logismos_II" : "Λογισμός 2"; - } else if (normalisedCourse.contains(("Λογισμός I"))) { - return greeklish ? "logismos_I" : "Λογισμός 1"; - } else if (normalisedCourse.contains(("Λογική Σχεδίαση"))) { - return greeklish ? "logiki_sxediash" : "Λογική Σχεδίαση"; - } else if (normalisedCourse.contains(("Λειτουργικά Συστήματα"))) { - return greeklish ? "OS" : "Λειτουργικά"; - } else if (normalisedCourse.contains(("Κινητές και Δορυφορικές Επικοινωνίες"))) { - return greeklish ? "kinhtes_doryforikes_epik" : "Κινητές & Δορυφορικές Επικοινωνίες"; - } else if (normalisedCourse.contains(("Κβαντική Φυσική"))) { - return greeklish ? "kvantikh" : "Κβαντική"; - } else if (normalisedCourse.contains(("Θεωρία και Τεχνολογία Πυρηνικών Αντιδραστήρων"))) { - return greeklish ? "texn_antidrasthrwn" : "Τεχνολογία Αντιδραστήρων"; - } else if (normalisedCourse.contains(("Θεωρία Υπολογισμών και Αλγορίθμων"))) { - return greeklish ? "thya" : "ΘΥΑ"; - } else if (normalisedCourse.contains(("Θεωρία Σκέδασης"))) { - return greeklish ? "skedash" : "Σκέδαση"; - } else if (normalisedCourse.contains(("Θεωρία Σημάτων και Γραμμικών Συστημάτων"))) { - return greeklish ? "analog_shma" : "Σύματα & Συστήματα"; - } else if (normalisedCourse.contains(("Θεωρία Πληροφοριών"))) { - return greeklish ? "theoria_plir" : "Θεωρία Πληρ."; - } else if (normalisedCourse.contains(("Θεωρία Πιθανοτήτων και Στατιστική"))) { - return greeklish ? "pithanothtes" : "Πιθανότητες"; - } else if (normalisedCourse.contains(("Ημιαγωγά Υλικά: Θεωρία-Διατάξεις"))) { - return greeklish ? "Hmiagwga_Ylika" : "Ημιαγωγά Υλικά"; - } else if (normalisedCourse.contains(("Ηλεκτρονική III"))) { - return greeklish ? "hlektronikh_III" : "Ηλεκτρονική 3"; - } else if (normalisedCourse.contains(("Ηλεκτρονική II"))) { - return greeklish ? "hlektronikh_2" : "Ηλεκτρονική 2"; - } else if (normalisedCourse.contains(("Ηλεκτρονική I"))) { - return greeklish ? "hlektronikh_1" : "Ηλεκτρονική 1"; - } else if (normalisedCourse.contains(("Ηλεκτρονικές Διατάξεις και Μετρήσεις"))) { - return greeklish ? "hlektron_diatakseis_metrhseis" : "Ηλεκτρονικές Διατάξεις και Μετρήσεις"; - } else if (normalisedCourse.contains(("Ηλεκτρονικά Ισχύος II"))) { - return greeklish ? "isxyos_II" : "Ισχύος 2"; - } else if (normalisedCourse.contains(("Ηλεκτρονικά Ισχύος I"))) { - return greeklish ? "isxyos_I" : "Ισχύος 1"; - } else if (normalisedCourse.contains(("Ηλεκτρομαγνητικό Πεδίο II"))) { - return greeklish ? "pedio_II" : "Πεδίο 2"; - } else if (normalisedCourse.contains(("Ηλεκτρομαγνητικό Πεδίο I"))) { - return greeklish ? "pedio_I" : "Πεδίο 1"; - } else if (normalisedCourse.contains(("Ηλεκτρομαγνητική Συμβατότητα"))) { - return greeklish ? "HM_symvatothta" : "H/M Συμβατότητα"; - } else if (normalisedCourse.contains(("Ηλεκτρολογικά Υλικά"))) { - return greeklish ? "ylika" : "Ηλεκτρ. Υλικά"; - } else if (normalisedCourse.contains(("Ηλεκτρική Οικονομία"))) { - return greeklish ? "hlektr_oikonomia" : "Ηλεκτρική Οικονομία"; - } else if (normalisedCourse.contains(("Ηλεκτρικές Μηχανές Γ'"))) { - return greeklish ? "mhxanes_C" : "Μηχανές Γ"; - } else if (normalisedCourse.contains(("Ηλεκτρικές Μηχανές Β'"))) { - return greeklish ? "mhxanes_B" : "Μηχανές Β"; - } else if (normalisedCourse.contains(("Ηλεκτρικές Μηχανές Α'"))) { - return greeklish ? "mhxanes_A" : "Μηχανές Α"; - } else if (normalisedCourse.contains(("Ηλεκτρικές Μετρήσεις II"))) { - return greeklish ? "metrhseis_II" : "Μετρήσεις 2"; - } else if (normalisedCourse.contains(("Ηλεκτρικές Μετρήσεις I"))) { - return greeklish ? "metrhseis_1" : "Μετρήσεις 1"; - } else if (normalisedCourse.contains(("Ηλεκτρικά Κυκλώματα III"))) { - return greeklish ? "kyklwmata_I" : "Κυκλώματα 3"; - } else if (normalisedCourse.contains(("Ηλεκτρικά Κυκλώματα II"))) { - return greeklish ? "kyklwmata_II" : "Κυκλώματα 2"; - } else if (normalisedCourse.contains(("Ηλεκτρικά Κυκλώματα I"))) { - return greeklish ? "kyklwmata_I" : "Κυκλώματα 1"; - } else if (normalisedCourse.contains(("Ηλεκτρακουστική II"))) { - return greeklish ? "hlektroakoystikh_II" : "Ηλεκτροακουστική 2"; - } else if (normalisedCourse.contains(("Ηλεκτρακουστική I"))) { - return greeklish ? "hlektroakoystikh_I" : "Ηλεκτροακουστική 1"; - } else if (normalisedCourse.contains(("Εφαρμοσμένη Θερμοδυναμική"))) { - return greeklish ? "thermodynamikh" : "Θερμοδυναμική"; - } else if (normalisedCourse.contains(("Εφαρμοσμένα Μαθηματικά II"))) { - return greeklish ? "efarmosmena_math_II" : "Εφαρμοσμένα 2"; - } else if (normalisedCourse.contains(("Εφαρμοσμένα Μαθηματικά I"))) { - return greeklish ? "efarmosmena_math_I" : "Εφαρμοσμένα 1"; - } else if (normalisedCourse.contains(("Εφαρμογές Τηλεπικοινωνιακών Διατάξεων"))) { - return greeklish ? "efarm_thlep_diataksewn" : "Εφαρμογές Τηλεπ. Διατάξεων"; - } else if (normalisedCourse.contains(("Ευφυή Συστήματα Ρομπότ"))) { - return greeklish ? "eufuh" : "Ευφυή"; - } else if (normalisedCourse.contains(("Ευρυζωνικά Δίκτυα"))) { - return greeklish ? "eyryzwnika" : "Ευρυζωνικά"; - } else if (normalisedCourse.contains(("Επιχειρησιακή Έρευνα"))) { - return greeklish ? "epixeirisiaki" : "Επιχειρησιακή Έρευνα"; - } else if (normalisedCourse.contains(("Ενσωματωμένα Συστήματα Πραγματικού Χρόνου"))) { - return greeklish ? "enswmatwmena" : "Ενσωματωμένα"; - } else if (normalisedCourse.contains(("Εισαγωγή στις εφαρμογές Πυρηνικής Τεχνολογίας"))) { - return greeklish ? "Intro_Purhnikh_Texn" : "Εισ. Πυρηνικη Τεχν."; - } else if (normalisedCourse.contains(("Εισαγωγή στην Πολιτική Οικονομία"))) { - return greeklish ? "polit_oik" : "Πολιτική Οικονομία"; - } else if (normalisedCourse.contains(("Εισαγωγή στην Ενεργειακή Τεχνολογία II"))) { - return greeklish ? "EET_2" : "ΕΕΤ2"; - } else if (normalisedCourse.contains(("Εισαγωγή στην Ενεργειακή Τεχνολογία I"))) { - return greeklish ? "EET_I" : "ΕΕΤ 1"; - } else if (normalisedCourse.contains(("Ειδικές Κεραίες, Σύνθεση Κεραιών"))) { - return greeklish ? "eidikes_keraies" : "Ειδικές Κεραίες, Σύνθεση Κεραιών"; - } else if (normalisedCourse.contains(("Ειδικές Αρχιτεκτονικές Υπολογιστών"))) { - return greeklish ? "eidikes_arx_ypolog" : "Ειδικές Αρχιτεκτονικές Υπολογιστών"; - } else if (normalisedCourse.contains(("Ειδικά Κεφάλαια Συστημάτων Ηλεκτρικής Ενέργειας"))) { - return greeklish ? "ekshe" : "ΕΚΣΗΕ"; - } else if (normalisedCourse.contains(("Ειδικά Κεφάλαια Ηλεκτρομαγνητικού Πεδίου I"))) { - return greeklish ? "eidika_kef_HM_pedioy_I" : "Ειδικά Κεφάλαια Ηλεκτρομαγνητικού Πεδίου I"; - } else if (normalisedCourse.contains(("Ειδικά Κεφάλαια Διαφορικών Εξισώσεων"))) { - return greeklish ? "eidika_kef_diaf_eksis" : "Ειδικά Κεφάλαια Διαφορικών Εξισώσεων"; - } else if (normalisedCourse.contains(("Δομημένος Προγραμματισμός"))) { - return greeklish ? "C" : "Δομ. Προγραμμ."; - } else if (normalisedCourse.contains(("Δομές Δεδομένων"))) { - return greeklish ? "dom_dedomenwn" : "Δομ. Δεδομ."; - } else if (normalisedCourse.contains(("Διαχείριση Συστημάτων Ηλεκτρικής Ενέργειας"))) { - return greeklish ? "dshe" : "ΔΣΗΕ"; - } else if (normalisedCourse.contains(("Διαφορικές Εξισώσεις"))) { - return greeklish ? "diaforikes" : "Διαφορικές"; - } else if (normalisedCourse.contains(("Διανεμημένη Παραγωγή"))) { - return greeklish ? "dian_paragwgh" : "Διανεμημένη Παραγωγή"; - } else if (normalisedCourse.contains(("Διακριτά μαθηματικά"))) { - return greeklish ? "diakrita" : "Διακριτά Μαθηματικά"; - } else if (normalisedCourse.contains(("Διακριτά Μαθηματικά"))) { - return greeklish ? "diakrita" : "Διακριτά Μαθηματικά"; - } else if (normalisedCourse.contains(("Διάδοση Ηλεκτρομαγνητικού Κύματος I (πρώην Πεδίο III)"))) { - return greeklish ? "diadosi_1" : "Διάδοση 1"; - } else if (normalisedCourse.contains(("Διάδοση Η/Μ Κύματος II"))) { - return greeklish ? "diadosi_II" : "Διάδοση 2"; - } else if (normalisedCourse.contains(("Δίκτυα Υπολογιστών II"))) { - return greeklish ? "diktya_II" : "Δίκτυα 2"; - } else if (normalisedCourse.contains(("Δίκτυα Υπολογιστών I"))) { - return greeklish ? "diktya_I" : "Δίκτυα 1"; - } else if (normalisedCourse.contains(("Δίκτυα Τηλεπικοινωνιών"))) { - return greeklish ? "diktya_thlep" : "Δίκτυα Τηλέπ."; - } else if (normalisedCourse.contains(("Γραφική με Υπολογιστές"))) { - return greeklish ? "grafikh" : "Γραφική"; - } else if (normalisedCourse.contains(("Γραμμική Άλγεβρα"))) { - return greeklish ? "grammikh_algebra" : "Γραμμ. Άλγεβρ."; - } else if (normalisedCourse.contains(("Γεωηλεκτρομαγνητισμός"))) { - return greeklish ? "geohlektromagnitismos" : "Γεωηλεκτρομαγνητισμός"; - } else if (normalisedCourse.contains(("Βιοϊατρική Τεχνολογία"))) { - return greeklish ? "vioiatriki" : "Βιοιατρική"; - } else if (normalisedCourse.contains(("Βιομηχανική Πληροφορική"))) { - return greeklish ? "viomix_plir" : "Βιομηχανική Πληρ"; - } else if (normalisedCourse.contains(("Βιομηχανικά Ηλεκτρονικά"))) { - return greeklish ? "bhomix_hlektronika" : "Βιομηχανικά Ηλεκτρονικά"; - } else if (normalisedCourse.contains(("Βάσεις Δεδομένων"))) { - return greeklish ? "vaseis" : "Βάσεις"; - } else if (normalisedCourse.contains(("Ασύρματος Τηλεπικοινωνία II"))) { - return greeklish ? "asyrmatos_II" : "Ασύρματος 2"; - } else if (normalisedCourse.contains(("Ασύρματος Τηλεπικοινωνία I"))) { - return greeklish ? "asyrmatos_I" : "Ασύρματος 1"; - } else if (normalisedCourse.contains(("Ασφάλεια Πληροφοριακών Συστημάτων"))) { - return greeklish ? "asfaleia" : "Ασφάλεια"; - } else if (normalisedCourse.contains(("Ασαφή Συστήματα"))) { - return greeklish ? "asafh" : "Ασαφή"; - } else if (normalisedCourse.contains(("Αρχιτεκτονική Υπολογιστών"))) { - return greeklish ? "arx_ypologistwn" : "Αρχ. Υπολογιστών"; - } else if (normalisedCourse.contains(("Αρχές Παράλληλης Επεξεργασίας"))) { - return greeklish ? "arxes_parall_epeksergasias" : "Αρχές Παράλληλης Επεξεργασίας"; - } else if (normalisedCourse.contains(("Αρχές Οικονομίας"))) { - return greeklish ? "arx_oikonomias" : "Αρχές Οικονομίας"; - } else if (normalisedCourse.contains(("Αριθμητική Ανάλυση"))) { - return greeklish ? "arith_anal" : "Αριθμ. Ανάλυση"; - } else if (normalisedCourse.contains(("Αξιοπιστία Συστημάτων"))) { - return greeklish ? "aksiopistia_systhmatwn" : "Αξιοπιστία Συστημάτων"; - } else if (normalisedCourse.contains(("Αντικειμενοστραφής Προγραμματισμός"))) { - return greeklish ? "OOP" : "Αντικειμενοστραφής"; - } else if (normalisedCourse.contains(("Αναλογικές Τηλεπικοινωνίες (πρώην Τηλεπικοινωνιακά Συστήματα I)"))) { - return greeklish ? "anal_thlep" : "Αναλογικές Τηλεπ."; - } else if (normalisedCourse.contains(("Αναγνώριση Προτύπων"))) { - return greeklish ? "protipa" : "Αναγνώριση Προτύπων"; - } else if (normalisedCourse.contains(("Ανάλυση και Σχεδίαση Αλγορίθμων"))) { - return greeklish ? "algorithms" : "Αλγόριθμοι"; - } else if (normalisedCourse.contains(("Ανάλυση Χρονοσειρών"))) { - return greeklish ? "xronoseires" : "Χρονοσειρές"; - } else if (normalisedCourse.contains(("Ανάλυση Συστημάτων Ηλεκτρικής Ενέργειας"))) { - return greeklish ? "ASHE" : "ΑΣΗΕ"; - } else if (normalisedCourse.contains(("Ανάλυση Ηλεκτρικών Κυκλωμάτων με Υπολογιστή"))) { - return greeklish ? "analysh_hlektr_kykl" : "Ανάλυση Ηλεκτρικ. Κυκλ. με Υπολογιστή"; - } else if (normalisedCourse.contains(("Ακουστική II"))) { - return greeklish ? "akoystikh_II" : "Ακουστική 2"; - } else if (normalisedCourse.contains(("Ακουστική I"))) { - return greeklish ? "akoystikh_I" : "Ακουστική 1"; - } else { - Timber.wtf("Unrecognised course came in the upload fields generator! Course string = %s", course); - return null; - } - } } \ No newline at end of file diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsCourse.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsCourse.java new file mode 100644 index 00000000..0fbedce8 --- /dev/null +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsCourse.java @@ -0,0 +1,66 @@ +package gr.thmmy.mthmmy.activities.upload; + +import java.util.HashMap; +import java.util.Map; + +import timber.log.Timber; + +public class UploadsCourse { + private String name; + private String minifiedName; + private String greeklishName; + + public UploadsCourse(String fullName, String minifiedName, String greeklishName) { + this.name = fullName; + this.minifiedName = minifiedName; + this.greeklishName = greeklishName; + } + + String getName() { + return name; + } + + String getMinifiedName() { + return minifiedName; + } + + String getGreeklishName() { + return greeklishName; + } + + static Map generateUploadsCourses(String[] uploadsCoursesRes){ + Map uploadsCourses = new HashMap<>(); + for(String uploadsCourseStr:uploadsCoursesRes) { + String[] split = uploadsCourseStr.split(","); + UploadsCourse uploadsCourse = new UploadsCourse(split[0], split[1], split[2]); + uploadsCourses.put(uploadsCourse.getName(),uploadsCourse); + } + return uploadsCourses; + } + + static UploadsCourse findCourse(String retrievedCourse, + Map uploadsCourses){ + retrievedCourse = normalizeGreekNumbers(retrievedCourse); + Timber.w("AAAAAAAA %s",retrievedCourse); + UploadsCourse uploadsCourse = uploadsCourses.get(retrievedCourse); + if(uploadsCourse != null) return uploadsCourse; + + String foundKey = null; + for (Map.Entry entry : uploadsCourses.entrySet()) { + String key = entry.getKey(); + if (key.contains(retrievedCourse)&& (foundKey==null || key.length()>foundKey.length())) + foundKey = key; + } + + if(foundKey==null){ + Timber.w("Couldn't find course that matches %s", retrievedCourse); + //TODO: report to Firebase for a new Course + } + + return uploadsCourses.get(foundKey); + } + + private static String normalizeGreekNumbers(String stringWithGreekNumbers) { + return stringWithGreekNumbers.replaceAll("Ι", "I"); + } +} diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java index 1bb45c84..5bb385c2 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java +++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java @@ -3,13 +3,12 @@ package gr.thmmy.mthmmy.activities.upload; import android.content.Context; import android.net.Uri; import android.os.Environment; +import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; -import android.util.Log; -import android.widget.Toast; - import com.snatik.storage.Storage; import java.io.BufferedInputStream; diff --git a/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java b/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java index ce4e4068..6ba7d3cc 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java +++ b/app/src/main/java/gr/thmmy/mthmmy/base/BaseApplication.java @@ -10,6 +10,9 @@ import android.os.Bundle; import android.util.DisplayMetrics; import android.widget.ImageView; +import androidx.core.content.ContextCompat; +import androidx.preference.PreferenceManager; + import com.crashlytics.android.Crashlytics; import com.crashlytics.android.core.CrashlyticsCore; import com.franmontiel.persistentcookiejar.PersistentCookieJar; @@ -33,8 +36,6 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; -import androidx.core.content.ContextCompat; -import androidx.preference.PreferenceManager; import gr.thmmy.mthmmy.BuildConfig; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.session.SessionManager; diff --git a/app/src/main/java/gr/thmmy/mthmmy/base/BaseFragment.java b/app/src/main/java/gr/thmmy/mthmmy/base/BaseFragment.java index 03622e83..c2c1a578 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/base/BaseFragment.java +++ b/app/src/main/java/gr/thmmy/mthmmy/base/BaseFragment.java @@ -5,6 +5,7 @@ import android.os.Bundle; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; + import okhttp3.OkHttpClient; public abstract class BaseFragment extends Fragment { diff --git a/app/src/main/java/gr/thmmy/mthmmy/editorview/EditorView.java b/app/src/main/java/gr/thmmy/mthmmy/editorview/EditorView.java index 3b41d07c..97f7d42f 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/editorview/EditorView.java +++ b/app/src/main/java/gr/thmmy/mthmmy/editorview/EditorView.java @@ -26,16 +26,17 @@ import android.widget.PopupWindow; import android.widget.ScrollView; import android.widget.TextView; -import com.google.android.material.textfield.TextInputEditText; -import com.google.android.material.textfield.TextInputLayout; - -import java.util.Objects; - import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageButton; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; + +import java.util.Objects; + import gr.thmmy.mthmmy.R; import timber.log.Timber; diff --git a/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboard.java b/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboard.java index cd57fb5e..903ff5fe 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboard.java +++ b/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboard.java @@ -9,11 +9,12 @@ import android.view.MotionEvent; import android.view.inputmethod.InputConnection; import android.widget.LinearLayout; -import java.util.HashSet; - import androidx.appcompat.widget.AppCompatImageButton; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; + +import java.util.HashSet; + import gr.thmmy.mthmmy.R; public class EmojiKeyboard extends LinearLayout implements IEmojiKeyboard { diff --git a/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboardAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboardAdapter.java index c3b0758b..efcb9519 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboardAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/editorview/EmojiKeyboardAdapter.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatImageButton; import androidx.recyclerview.widget.RecyclerView; + import gr.thmmy.mthmmy.R; public class EmojiKeyboardAdapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/gr/thmmy/mthmmy/editorview/FormatButtonsAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/editorview/FormatButtonsAdapter.java index 98277550..732149ae 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/editorview/FormatButtonsAdapter.java +++ b/app/src/main/java/gr/thmmy/mthmmy/editorview/FormatButtonsAdapter.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatImageButton; import androidx.recyclerview.widget.RecyclerView; + import gr.thmmy.mthmmy.R; public class FormatButtonsAdapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/gr/thmmy/mthmmy/model/Bookmark.java b/app/src/main/java/gr/thmmy/mthmmy/model/Bookmark.java index ac622a64..1da43458 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/model/Bookmark.java +++ b/app/src/main/java/gr/thmmy/mthmmy/model/Bookmark.java @@ -1,11 +1,11 @@ package gr.thmmy.mthmmy.model; -import java.util.ArrayList; -import java.util.Objects; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.util.ArrayList; +import java.util.Objects; + public class Bookmark implements java.io.Serializable { private final String title, id; private boolean isNotificationsEnabled; diff --git a/app/src/main/java/gr/thmmy/mthmmy/model/Post.java b/app/src/main/java/gr/thmmy/mthmmy/model/Post.java index 0c66ba83..7e0b7f55 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/model/Post.java +++ b/app/src/main/java/gr/thmmy/mthmmy/model/Post.java @@ -1,10 +1,10 @@ package gr.thmmy.mthmmy.model; +import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.Objects; -import androidx.annotation.Nullable; - /** * Class that defines a topic's post. All member variables are declared final (thus no setters are * supplied). Class has two constructors and getter methods for all variables. diff --git a/app/src/main/java/gr/thmmy/mthmmy/model/UploadFile.java b/app/src/main/java/gr/thmmy/mthmmy/model/UploadFile.java index c1bdb539..fb5c2161 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/model/UploadFile.java +++ b/app/src/main/java/gr/thmmy/mthmmy/model/UploadFile.java @@ -1,6 +1,7 @@ package gr.thmmy.mthmmy.model; import android.net.Uri; + import androidx.annotation.Nullable; import java.io.File; diff --git a/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java b/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java index 5631b325..41ff3d95 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java +++ b/app/src/main/java/gr/thmmy/mthmmy/services/NotificationService.java @@ -13,6 +13,10 @@ import android.os.Build; import android.os.Bundle; import android.service.notification.StatusBarNotification; +import androidx.annotation.RequiresApi; +import androidx.core.app.NotificationCompat; +import androidx.preference.PreferenceManager; + import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; @@ -23,9 +27,6 @@ import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; -import androidx.annotation.RequiresApi; -import androidx.core.app.NotificationCompat; -import androidx.preference.PreferenceManager; import gr.thmmy.mthmmy.R; import gr.thmmy.mthmmy.activities.topic.TopicActivity; import gr.thmmy.mthmmy.base.BaseApplication; diff --git a/app/src/main/java/gr/thmmy/mthmmy/services/UploadsReceiver.java b/app/src/main/java/gr/thmmy/mthmmy/services/UploadsReceiver.java index c7c56e86..f8b06e28 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/services/UploadsReceiver.java +++ b/app/src/main/java/gr/thmmy/mthmmy/services/UploadsReceiver.java @@ -5,14 +5,14 @@ import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; -import androidx.appcompat.app.AlertDialog; - import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; + import com.snatik.storage.Storage; import net.gotev.uploadservice.ServerResponse; diff --git a/app/src/main/java/gr/thmmy/mthmmy/session/SessionManager.java b/app/src/main/java/gr/thmmy/mthmmy/session/SessionManager.java index 42f02375..4e91bc72 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/session/SessionManager.java +++ b/app/src/main/java/gr/thmmy/mthmmy/session/SessionManager.java @@ -2,6 +2,9 @@ package gr.thmmy.mthmmy.session; import android.content.SharedPreferences; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.franmontiel.persistentcookiejar.PersistentCookieJar; import com.franmontiel.persistentcookiejar.persistence.SharedPrefsCookiePersistor; @@ -14,8 +17,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import gr.thmmy.mthmmy.utils.parsing.ParseException; import gr.thmmy.mthmmy.utils.parsing.ParseHelpers; import okhttp3.Cookie; diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/AppCompatSpinnerWithoutDefault.java b/app/src/main/java/gr/thmmy/mthmmy/utils/AppCompatSpinnerWithoutDefault.java index b64bb57d..77293dfe 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/AppCompatSpinnerWithoutDefault.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/AppCompatSpinnerWithoutDefault.java @@ -10,12 +10,12 @@ import android.widget.AdapterView; import android.widget.SpinnerAdapter; import android.widget.TextView; +import androidx.appcompat.widget.AppCompatSpinner; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import androidx.appcompat.widget.AppCompatSpinner; - public class AppCompatSpinnerWithoutDefault extends AppCompatSpinner { public AppCompatSpinnerWithoutDefault(Context context) { super(context); diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/CustomLinearLayoutManager.java b/app/src/main/java/gr/thmmy/mthmmy/utils/CustomLinearLayoutManager.java index de9abfd0..f4dd5042 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/CustomLinearLayoutManager.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/CustomLinearLayoutManager.java @@ -4,6 +4,7 @@ import android.content.Context; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import timber.log.Timber; public class CustomLinearLayoutManager extends LinearLayoutManager { diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/FileUtils.java b/app/src/main/java/gr/thmmy/mthmmy/utils/FileUtils.java index 7beffeb6..e1ef6f9e 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/FileUtils.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/FileUtils.java @@ -4,9 +4,10 @@ import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.OpenableColumns; +import android.webkit.MimeTypeMap; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import android.webkit.MimeTypeMap; import java.io.File; diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareFABBehavior.java b/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareFABBehavior.java index 44c0d4f3..a77502f3 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareFABBehavior.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareFABBehavior.java @@ -2,7 +2,6 @@ package gr.thmmy.mthmmy.utils; import android.content.Context; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import androidx.annotation.NonNull; diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareLinearBehavior.java b/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareLinearBehavior.java index 91e2305c..cc877deb 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareLinearBehavior.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/ScrollAwareLinearBehavior.java @@ -6,13 +6,13 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewPropertyAnimator; -import com.google.android.material.snackbar.Snackbar; - import androidx.annotation.NonNull; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.ViewCompat; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; +import com.google.android.material.snackbar.Snackbar; + /** * Extends LinearLayout's behavior. Used for bottom navigation bar. *

When a nested ScrollView is scrolled down, the view will disappear. diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/TakePhoto.java b/app/src/main/java/gr/thmmy/mthmmy/utils/TakePhoto.java index b2ef977f..1ac9c6a8 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/TakePhoto.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/TakePhoto.java @@ -14,10 +14,11 @@ import android.media.ExifInterface; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; +import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; -import android.widget.Toast; import java.io.File; import java.io.FileNotFoundException; diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/ToggledBackgroundButton.java b/app/src/main/java/gr/thmmy/mthmmy/utils/ToggledBackgroundButton.java new file mode 100644 index 00000000..6c189e87 --- /dev/null +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/ToggledBackgroundButton.java @@ -0,0 +1,27 @@ +package gr.thmmy.mthmmy.utils; +import android.content.Context; +import android.util.AttributeSet; + +import androidx.appcompat.widget.AppCompatButton; + +public class ToggledBackgroundButton extends AppCompatButton { + + public ToggledBackgroundButton(Context context) { + super(context); + } + + public ToggledBackgroundButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ToggledBackgroundButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public void setEnabled(boolean enabled) { + setAlpha(enabled ? 1 : 0.5f); + super.setEnabled(enabled); + } +} + diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java b/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java index f937578a..62380f80 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java +++ b/app/src/main/java/gr/thmmy/mthmmy/utils/parsing/ParseHelpers.java @@ -235,7 +235,7 @@ public class ParseHelpers { stringBuilder.append(Character.toString((char) i)); } - Timber.i("Email deobfuscated."); + Timber.d("Email deobfuscated."); return stringBuilder.toString(); } diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/BaseViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/BaseViewModel.java index a038c033..5787b36d 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/BaseViewModel.java +++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/BaseViewModel.java @@ -3,6 +3,7 @@ package gr.thmmy.mthmmy.viewmodel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; + import gr.thmmy.mthmmy.model.Bookmark; public class BaseViewModel extends ViewModel { diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/ShoutboxViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/ShoutboxViewModel.java index 25092578..c3f4dce5 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/ShoutboxViewModel.java +++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/ShoutboxViewModel.java @@ -4,6 +4,7 @@ import android.os.AsyncTask; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; + import gr.thmmy.mthmmy.activities.shoutbox.SendShoutTask; import gr.thmmy.mthmmy.activities.shoutbox.ShoutboxTask; import gr.thmmy.mthmmy.model.Shoutbox; diff --git a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java index c15e46db..750e6a34 100644 --- a/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java +++ b/app/src/main/java/gr/thmmy/mthmmy/viewmodel/TopicViewModel.java @@ -8,9 +8,10 @@ import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.RadioGroup; +import androidx.lifecycle.MutableLiveData; + import java.util.ArrayList; -import androidx.lifecycle.MutableLiveData; import gr.thmmy.mthmmy.activities.settings.SettingsActivity; import gr.thmmy.mthmmy.activities.topic.tasks.DeleteTask; import gr.thmmy.mthmmy.activities.topic.tasks.EditTask; diff --git a/app/src/main/res/layout/activity_upload.xml b/app/src/main/res/layout/activity_upload.xml index fb985454..0eea2f63 100644 --- a/app/src/main/res/layout/activity_upload.xml +++ b/app/src/main/res/layout/activity_upload.xml @@ -118,7 +118,7 @@ android:inputType="textMultiLine" /> - + + + + Ακουστική I,Ακουστική 1,akoystikh_I + Ακουστική II,Ακουστική 2,akoystikh_II + Ανάλυση Ηλεκτρικών Κυκλωμάτων με Υπολογιστή,Ανάλυση Ηλεκτρικ. Κυκλ. με Υπολογιστή,analysh_hlektr_kykl + Ανάλυση Συστημάτων Ηλεκτρικής Ενέργειας,ΑΣΗΕ,ASHE + Ανάλυση Χρονοσειρών,Χρονοσειρές,xronoseires + Ανάλυση και Σχεδίαση Αλγορίθμων,Αλγόριθμοι,algorithms + Αναγνώριση Προτύπων,Αναγνώριση Προτύπων,protipa + Αναλογικές Τηλεπικοινωνίες (πρώην Τηλεπικοινωνιακά Συστήματα I),Αναλογικές Τηλεπ.,anal_thlep + Αντικειμενοστραφής Προγραμματισμός,Αντικειμενοστραφής,OOP + Αξιοπιστία Συστημάτων,Αξιοπιστία Συστημάτων,aksiopistia_systhmatwn + Αριθμητική Ανάλυση,Αριθμ. Ανάλυση,arith_anal + Αρχές Οικονομίας,Αρχές Οικονομίας,arx_oikonomias + Αρχές Παράλληλης Επεξεργασίας,Αρχές Παράλληλης Επεξεργασίας,arxes_parall_epeksergasias + Αρχιτεκτονική Υπολογιστών,Αρχ. Υπολογιστών,arx_ypologistwn + Ασαφή Συστήματα,Ασαφή,asafh + Ασφάλεια Πληροφοριακών Συστημάτων,Ασφάλεια,asfaleia + Ασύρματος Τηλεπικοινωνία I,Ασύρματος 1,asyrmatos_I + Ασύρματος Τηλεπικοινωνία II,Ασύρματος 2,asyrmatos_II + Βάσεις Δεδομένων,Βάσεις,vaseis + Βιομηχανικά Ηλεκτρονικά,Βιομηχανικά Ηλεκτρονικά,bhomix_hlektronika + Βιομηχανική Πληροφορική,Βιομηχανική Πληρ,viomix_plir + Βιοϊατρική Τεχνολογία,Βιοιατρική,vioiatriki + Γεωηλεκτρομαγνητισμός,Γεωηλεκτρομαγνητισμός,geohlektromagnitismos + Γραμμική Άλγεβρα,Γραμμ. Άλγεβρ.,grammikh_algebra + Γραφική με Υπολογιστές,Γραφική,grafikh + Δίκτυα Τηλεπικοινωνιών,Δίκτυα Τηλέπ.,diktya_thlep + Δίκτυα Υπολογιστών I,Δίκτυα 1,diktya_I + Δίκτυα Υπολογιστών II,Δίκτυα 2,diktya_II + Διάδοση Η/Μ Κύματος II,Διάδοση 2,diadosi_II + Διάδοση Ηλεκτρομαγνητικού Κύματος I (πρώην Πεδίο III),Διάδοση 1,diadosi_I + Διακριτά Μαθηματικά,Διακριτά Μαθηματικά,diakrita + Διακριτά μαθηματικά,Διακριτά Μαθηματικά,diakrita + Διανεμημένη Παραγωγή,Διανεμημένη Παραγωγή,dian_paragwgh + Διαφορικές Εξισώσεις,Διαφορικές,diaforikes + Διαχείριση Συστημάτων Ηλεκτρικής Ενέργειας,ΔΣΗΕ,dshe + Δομές Δεδομένων,Δομ. Δεδομ.,dom_dedomenwn + Δομημένος Προγραμματισμός,Δομ. Προγραμμ.,C + Ειδικά Κεφάλαια Διαφορικών Εξισώσεων,Ειδικά Κεφάλαια Διαφορικών Εξισώσεων,eidika_kef_diaf_eksis + Ειδικά Κεφάλαια Ηλεκτρομαγνητικού Πεδίου I,Ειδικά Κεφάλαια Ηλεκτρομαγνητικού Πεδίου I,eidika_kef_HM_pedioy_I + Ειδικά Κεφάλαια Συστημάτων Ηλεκτρικής Ενέργειας,ΕΚΣΗΕ,ekshe + Ειδικές Αρχιτεκτονικές Υπολογιστών,Ειδικές Αρχιτεκτονικές Υπολογιστών,eidikes_arx_ypolog + Ειδικές Κεραίες,eidikes_keraies, Σύνθεση Κεραιών + Εισαγωγή στην Ενεργειακή Τεχνολογία I,ΕΕΤ 1,EET_I + Εισαγωγή στην Ενεργειακή Τεχνολογία II,ΕΕΤ2,EET_II + Εισαγωγή στην Πολιτική Οικονομία,Πολιτική Οικονομία,polit_oik + Εισαγωγή στις εφαρμογές Πυρηνικής Τεχνολογίας,Εισ. Πυρηνικη Τεχν.,Intro_Purhnikh_Texn + Ενσωματωμένα Συστήματα Πραγματικού Χρόνου,Ενσωματωμένα,enswmatwmena + Επιχειρησιακή Έρευνα,Επιχειρησιακή Έρευνα,epixeirisiaki + Ευρυζωνικά Δίκτυα,Ευρυζωνικά,eyryzwnika + Ευφυή Συστήματα Ρομπότ,Ευφυή,eufuh + Εφαρμογές Τηλεπικοινωνιακών Διατάξεων,Εφαρμογές Τηλεπ. Διατάξεων,efarm_thlep_diataksewn + Εφαρμοσμένα Μαθηματικά I,Εφαρμοσμένα 1,efarmosmena_math_I + Εφαρμοσμένα Μαθηματικά II,Εφαρμοσμένα 2,efarmosmena_math_II + Εφαρμοσμένη Θερμοδυναμική,Θερμοδυναμική,thermodynamikh + Ηλεκτρακουστική I,Ηλεκτροακουστική 1,hlektroakoystikh_I + Ηλεκτρακουστική II,Ηλεκτροακουστική 2,hlektroakoystikh_II + Ηλεκτρικά Κυκλώματα I,Κυκλώματα 1,kyklwmata_I + Ηλεκτρικά Κυκλώματα II,Κυκλώματα 2,kyklwmata_II + Ηλεκτρικά Κυκλώματα III,Κυκλώματα 3,kyklwmata_I + Ηλεκτρικές Μετρήσεις I,Μετρήσεις 1,metrhseis_I + Ηλεκτρικές Μετρήσεις II,Μετρήσεις 2,metrhseis_II + Ηλεκτρικές Μηχανές Α\',Μηχανές Α,mhxanes_A + Ηλεκτρικές Μηχανές Β\',Μηχανές Β,mhxanes_B + Ηλεκτρικές Μηχανές Γ\',Μηχανές Γ,mhxanes_C + Ηλεκτρική Οικονομία,Ηλεκτρική Οικονομία,hlektr_oikonomia + Ηλεκτρολογικά Υλικά,Ηλεκτρ. Υλικά,ylika + Ηλεκτρομαγνητική Συμβατότητα,H/M Συμβατότητα,HM_symvatothta + Ηλεκτρομαγνητικό Πεδίο I,Πεδίο 1,pedio_I + Ηλεκτρομαγνητικό Πεδίο II,Πεδίο 2,pedio_II + Ηλεκτρονικά Iσχύος I,Iσχύος 1,isxyos_I + Ηλεκτρονικά Iσχύος II,Iσχύος 2,isxyos_II + Ηλεκτρονικές Διατάξεις και Μετρήσεις,Ηλεκτρονικές Διατάξεις και Μετρήσεις,hlektron_diatakseis_metrhseis + Ηλεκτρονική I,Ηλεκτρονική 1,hlektronikh_I + Ηλεκτρονική II,Ηλεκτρονική 2,hlektronikh_II + Ηλεκτρονική III,Ηλεκτρονική 3,hlektronikh_III + Ημιαγωγά Υλικά: Θεωρία-Διατάξεις,Ημιαγωγά Υλικά,Hmiagwga_Ylika + Θεωρία Πιθανοτήτων και Στατιστική,Πιθανότητες,pithanothtes + Θεωρία Πληροφοριών,Θεωρία Πληρ.,theoria_plir + Θεωρία Σημάτων και Γραμμικών Συστημάτων,Σύματα & Συστήματα,analog_shma + Θεωρία Σκέδασης,Σκέδαση,skedash + Θεωρία Υπολογισμών και Αλγορίθμων,ΘΥΑ,thya + Θεωρία και Τεχνολογία Πυρηνικών Αντιδραστήρων,Τεχνολογία Αντιδραστήρων,texn_antidrasthrwn + Κβαντική Φυσική,Κβαντική,kvantikh + Κινητές και Δορυφορικές Επικοινωνίες,Κινητές & Δορυφορικές Επικοινωνίες,kinhtes_doryforikes_epik + Λειτουργικά Συστήματα,Λειτουργικά,OS + Λογική Σχεδίαση,Λογική Σχεδίαση,logiki_sxediash + Λογισμός I,Λογισμός 1,logismos_I + Λογισμός II,Λογισμός 2,logismos_II + Μετάδοση Θερμότητας,Μετάδοση Θερμ.,metadosi_therm + Μικροεπεξεργαστές και Περιφερειακά,Μίκρο 2,mikro_II + Μικροκυματική Τηλεπισκόπηση,Τηλεπισκόπηση,thlepiskophsh + Μικροκύματα I,Μικροκύματα 1,mikrokymata_I + Μικροκύματα II,Μικροκύματα 2,mikrokymata_II + Οπτικές Επικοινωνίες,Οπτικές Τηλεπ.,optikes_thlep + Οπτική I,Οπτική 1,optikh_I + Οπτική II,Οπτική 2,optikh_II + Οργάνωση Υπολογιστών,Οργάνωση Υπολ.,org_ypol + Οργάνωση και Διοίκηση Εργοστασίων,Οργάνωση και Διοίκηση Εργοστασίων,organ_dioik_ergostasiwn + Παράλληλα και Κατανεμημένα Συστήματα,Παράλληλα,parallhla + Προγραμματιζόμενα Κυκλώματα ASIC,ASIC,asic + Προγραμματιστικές Τεχνικές,Προγραμματ. Τεχν.,cpp + Προηγμένες Τεχνικές Επεξεργασίας Σήματος,ΠΤΕΣ,ptes + Προσομοίωση και Μοντελοποίηση Συστημάτων,Μοντελοποίηση,montelopoihsh + Ρομποτική,Ρομποτική,rompotikh + Σήματα και Συστήματα,Σύματα & Συστήματα,analog_shma + Σερβοκινητήρια Συστήματα,Σέρβο,servo + Σταθμοί Παραγωγής Ηλεκτρικής Ενέργειας,ΣΠΗΕ,SPHE + Στοχαστικό Σήμα,Στοχ. Σήμα,stox_shma + Συστήματα Αυτομάτου Ελέγχου I,ΣΑΕ 1,SAE_I + Συστήματα Αυτομάτου Ελέγχου II,ΣΑΕ 2,SAE_II + Συστήματα Αυτομάτου Ελέγχου III,ΣΑΕ 3,SAE_III + Συστήματα Ηλεκτρικής Ενέργειας I,ΣΗΕ 1,SHE_I + Συστήματα Ηλεκτρικής Ενέργειας II,ΣΗΕ 2,SHE_II + Συστήματα Ηλεκτρικής Ενέργειας III,ΣΗΕ 3,SHE_III + Συστήματα Ηλεκτροκίνησης,Ηλεκτροκίνηση,hlektrokinhsh + Συστήματα Μικροϋπολογιστών,Μίκρο 1,mikro_I + Συστήματα Πολυμέσων και Εικονική Πραγματικότητα,Πολυμέσα,polymesa + Συστήματα Υπολογιστών (Υπολογιστικά Συστήματα),Συσ. Υπολογιστών,sys_ypologistwn + Σχεδίαση Συστημάτων VLSI,VLSI,VLSI + Σύνθεση Ενεργών και Παθητικών Κυκλωμάτων,Σύνθεση,synthesh + Σύνθεση Τηλεπικοινωνιακών Διατάξεων,Σύνθεση Τηλεπ. Διατάξεων,synth_thlep_diataksewn + Τεχνικές Βελτιστοποίησης,Βελτιστοποίηση,veltistopoihsh + Τεχνικές Κωδικοποίησης,Τεχνικές Κωδικοποίησης,texn_kwdikopoihshs + Τεχνικές Σχεδίασης με Η/Υ,Σχέδιο,sxedio + Τεχνικές μη Καταστρεπτικών Δοκιμών,Μη Καταστρεπτικές Δοκιμές,non_destructive_tests + Τεχνική Μηχανική,Τεχν. Μηχαν.,texn_mhxan + Τεχνολογία Ήχου και Εικόνας,Τεχνολογία Ήχου και Εικόνας,texn_hxoy_eikonas + Τεχνολογία Ηλεκτροτεχνικών Υλικών,Ηλεκτροτεχνικά Υλικά,Hlektrotexnika_Ylika + Τεχνολογία Λογισμικού,Τεχνολογία Λογισμικού,SE + Τηλεοπτικά Συστήματα,Τηλεοπτικά,tileoptika + Τηλεπικοινωνιακή Ηλεκτρονική,Τηλεπ. Ηλεκτρ.,tilep_ilektr + Υπολογιστικές Μέθοδοι στα Ενεργειακά Συστήματα,ΥΜΕΣ,ymes + Υπολογιστικός Ηλεκτρομαγνητισμός,Υπολογιστικός Η/Μ,ypologistikos_HM + Υψηλές Τάσεις 4,Υψηλές 4,ypshles_IV + Υψηλές Τάσεις I,Υψηλές 1,ypshles_I + Υψηλές Τάσεις II,Υψηλές 2,ypshles_II + Υψηλές Τάσεις III,Υψηλές 3,ypshles_III + Φυσική I,Φυσική 1,fysikh_I + Φωτονική Τεχνολογία,Φωτονική,fwtonikh + Ψηφιακά Συστήματα I,Ψηφιακά 1,pshfiaka_I + Ψηφιακά Συστήματα II,Ψηφιακά 2,pshfiaka_II + Ψηφιακά Συστήματα III,Ψηφιακά 3,pshfiaka_III + Ψηφιακά Φίλτρα,Φίλτρα,filtra + Ψηφιακές Τηλεπικοινωνίες I,Ψηφιακές Τηλεπ. 1,pshf_thlep_I + Ψηφιακές Τηλεπικοινωνίες II,Ψηφιακές Τηλεπ. 2,pshf_thlep_II + Ψηφιακή Επεξεργασία Εικόνας,ΨΕΕ,PSEE + Ψηφιακή Επεξεργασία Σήματος,ΨΕΣ,PSES + + \ No newline at end of file