diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4b01236..997b8d1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,6 +48,9 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/denizd/substitutionplan/FoodFragment.kt b/app/src/main/java/com/denizd/substitutionplan/FoodFragment.kt
index 8f49cb0..5437ece 100644
--- a/app/src/main/java/com/denizd/substitutionplan/FoodFragment.kt
+++ b/app/src/main/java/com/denizd/substitutionplan/FoodFragment.kt
@@ -1,5 +1,6 @@
package com.denizd.substitutionplan
+import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.preference.PreferenceManager
@@ -12,47 +13,53 @@ import com.madapps.prefrences.EasyPrefrences
class FoodFragment : Fragment(R.layout.food_layout) {
- private lateinit var foodArrayList: ArrayList
- private lateinit var recyclerView: RecyclerView
+ public val foodArrayList = ArrayList()
private val mAdapter = FoodAdapter(foodArrayList)
+ private lateinit var mContext: Context
+ private lateinit var prefs: SharedPreferences
+// private lateinit var edit: SharedPreferences.Editor
+ private lateinit var easyPrefs: EasyPrefrences
+ private lateinit var foodListPopulation: ArrayList
+ private lateinit var recyclerView: RecyclerView
-// override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
-// return inflater.inflate(R.layout.food_layout, null)
-// } // TODO do I need this?
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ mContext = context
+ prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
+// edit = prefs.edit()
+ easyPrefs = EasyPrefrences(mContext)
+ }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- val pullToRefresh = getView()?.findViewById(R.id.pullToRefresh) as SwipeRefreshLayout
- val prefs = PreferenceManager.getDefaultSharedPreferences(activity) as SharedPreferences
-// val edit = prefs.edit() as SharedPreferences.Editor
- val easyPrefs = EasyPrefrences(context!!)
- val foodListPopulation = ArrayList(easyPrefs.getListString("foodListPrefs"))
+ val pullToRefresh = view.findViewById(R.id.pullToRefresh)
+ foodListPopulation = ArrayList(easyPrefs.getListString("foodListPrefs"))
try {
- recyclerView = getView()?.findViewById(R.id.linear_food) as RecyclerView
+ recyclerView = view.findViewById(R.id.linear_food)
recyclerView.hasFixedSize()
- recyclerView.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL ,false)
+ recyclerView.layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL,false)
recyclerView.adapter = mAdapter
try {
recyclerView.removeAllViews()
- } catch (e: NullPointerException) {}
+ } catch (ignored: NullPointerException) {}
- for (i in 0..foodListPopulation.size) {
+ for (i in 0 until foodListPopulation.size) {
foodArrayList.add(Food(foodListPopulation[i]))
mAdapter.setFood(foodArrayList)
recyclerView.scheduleLayoutAnimation()
}
- } catch (e: NullPointerException) {}
+ } catch (ignored: NullPointerException) {}
if (prefs.getBoolean("autoRefresh", false)) {
pullToRefresh.isRefreshing = true
- // coroutines
+ DataFetcher(false, true, false, mContext, activity!!.application, view.rootView).execute()
}
pullToRefresh.setOnRefreshListener {
pullToRefresh.isRefreshing = true
- // coroutines
+ DataFetcher(false, true, false, mContext, activity!!.application, view.rootView).execute()
}
}
diff --git a/app/src/main/java/com/denizd/substitutionplan/FragmentFood.java b/app/src/main/java/com/denizd/substitutionplan/FragmentFood.java
index b452b75..c8ec85f 100644
--- a/app/src/main/java/com/denizd/substitutionplan/FragmentFood.java
+++ b/app/src/main/java/com/denizd/substitutionplan/FragmentFood.java
@@ -49,7 +49,7 @@ public class FragmentFood extends Fragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefreshFood);
+ final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
EasyPrefrences easyPrefs = new EasyPrefrences(getContext());
@@ -91,7 +91,7 @@ public class FragmentFood extends Fragment {
boolean attempt = false, npe = false;
Elements foodElements;
Document docFood;
- final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefreshFood);
+ final SwipeRefreshLayout pullToRefresh = getView().findViewById(R.id.pullToRefresh);
protected fetcher() {
}
diff --git a/app/src/main/java/com/denizd/substitutionplan/Main.kt b/app/src/main/java/com/denizd/substitutionplan/Main.kt
index 857f4fd..06b2eef 100644
--- a/app/src/main/java/com/denizd/substitutionplan/Main.kt
+++ b/app/src/main/java/com/denizd/substitutionplan/Main.kt
@@ -258,15 +258,15 @@ class Main : AppCompatActivity(R.layout.activity_main) {
lateinit var fragment: Fragment
when (item.itemId) {
R.id.plan -> {
- fragment = FragmentPlan()
+ fragment = PlanFragment(false)
toolbarTxt.text = getString(R.string.app_name)
}
R.id.personal -> {
- fragment = FragmentPersonal()
+ fragment = PlanFragment(true)
toolbarTxt.text = userPlan
}
R.id.menu -> {
- fragment = FragmentFood()
+ fragment = FoodFragment()
toolbarTxt.text = getString(R.string.foodmenu)
}
R.id.openinfopanel -> {
@@ -317,9 +317,7 @@ class Main : AppCompatActivity(R.layout.activity_main) {
}
appbarlayout.setExpanded(true)
}
-
}
-
}
private fun loadFragment(fragment: Fragment): Boolean {
@@ -328,7 +326,7 @@ class Main : AppCompatActivity(R.layout.activity_main) {
}
private fun notificationJob() {
- val componentName = ComponentName(this, ScheduledJobService::class.java)
+ val componentName = ComponentName(this, NotificationService::class.java)
val info = JobInfo.Builder(42, componentName)
.setRequiresCharging(false)
.setPersisted(true)
diff --git a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt b/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt
index 163d1ff..84a6193 100644
--- a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt
+++ b/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt
@@ -1,4 +1,50 @@
package com.denizd.substitutionplan
-class NotificationService {
+import android.app.job.JobParameters
+import android.app.job.JobService
+import android.preference.PreferenceManager
+import java.io.IOException
+import java.lang.NullPointerException
+import java.net.MalformedURLException
+import java.net.URL
+
+class NotificationService : JobService() {
+
+ private var jobCancelled = false
+ private val context = this
+
+ override fun onStartJob(params: JobParameters): Boolean {
+ doBackgroundWork(params)
+ return true
+ }
+
+ override fun onStopJob(params: JobParameters?): Boolean {
+ jobCancelled = true
+ return true
+ }
+
+ private fun doBackgroundWork(params: JobParameters) {
+ val prefs = PreferenceManager.getDefaultSharedPreferences(context)
+ val edit = prefs.edit()
+
+ Thread(Runnable {
+ if (jobCancelled) {
+ return@Runnable
+ }
+ if (prefs.getBoolean("notif", false)) {
+ edit.putInt("notificationTestNumberDev", prefs.getInt("notificationTestNumberDev", 0) + 1).apply()
+ try {
+ val url = URL("https://djd4rkn355.github.io/subst.html")
+ val connection = url.openConnection()
+ if (!connection.getHeaderField("Last-Modified").equals(prefs.getString("time", ""))) {
+ DataFetcher(true, true, true, context, application, null).execute()
+ edit.putString("time", connection.getHeaderField("Last-Modified")).apply()
+ }
+ } catch (ignored: NullPointerException) {}
+ catch (ignored: IOException) {}
+ catch (ignored: MalformedURLException) {}
+ }
+ jobFinished(params, false)
+ }).start()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/denizd/substitutionplan/PersonalFragment.kt b/app/src/main/java/com/denizd/substitutionplan/PersonalFragment.kt
new file mode 100644
index 0000000..9150efb
--- /dev/null
+++ b/app/src/main/java/com/denizd/substitutionplan/PersonalFragment.kt
@@ -0,0 +1,4 @@
+package com.denizd.substitutionplan
+
+class PersonalFragment {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/denizd/substitutionplan/PlanFragment.kt b/app/src/main/java/com/denizd/substitutionplan/PlanFragment.kt
new file mode 100644
index 0000000..5a4e583
--- /dev/null
+++ b/app/src/main/java/com/denizd/substitutionplan/PlanFragment.kt
@@ -0,0 +1,151 @@
+package com.denizd.substitutionplan
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.content.res.Configuration
+import android.os.Bundle
+import android.os.Handler
+import android.preference.PreferenceManager
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProviders
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import java.util.*
+import kotlin.collections.ArrayList
+
+class PlanFragment(isPersonal: Boolean) : Fragment(R.layout.plan) {
+ private lateinit var recyclerView: RecyclerView
+ private lateinit var mAdapter: CardAdapter
+ private lateinit var layoutManager: GridLayoutManager
+ private val planCardList = ArrayList()
+ private lateinit var bottomSheetText: TextView
+ private lateinit var substViewModel: SubstViewModel
+ private lateinit var mContext: Context
+ private lateinit var prefs: SharedPreferences
+ private lateinit var edit: SharedPreferences.Editor
+ private val personal = isPersonal
+
+ private lateinit var smileydown: TextView
+ private lateinit var smileydowntext: TextView
+ private lateinit var linearsmiley: LinearLayout
+ private var persPlanEmpty: Boolean = true
+ private val handler = Handler()
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ mContext = context
+ prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
+ edit = prefs.edit()
+ }
+
+ override fun onConfigurationChanged(newConfig: Configuration) {
+ super.onConfigurationChanged(newConfig)
+ val grid = when (newConfig.orientation) {
+ Configuration.ORIENTATION_PORTRAIT -> 1
+ else -> 2
+ }
+ layoutManager = GridLayoutManager(mContext, grid)
+ recyclerView.layoutManager = layoutManager
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val pullToRefresh = view.findViewById(R.id.pullToRefresh)
+ bottomSheetText = view.rootView.findViewById(R.id.bottom_sheet_text)
+
+ bottomSheetText.text = prefs.getString("informational", getString(R.string.noinfo))
+
+ recyclerView = view.findViewById(R.id.linearRecycler)
+ recyclerView.hasFixedSize()
+
+ val grid = when (resources.configuration.orientation) {
+ Configuration.ORIENTATION_PORTRAIT -> 1
+ else -> 2
+ }
+ layoutManager = GridLayoutManager(mContext, grid)
+ recyclerView.layoutManager = layoutManager
+
+ mAdapter = CardAdapter(planCardList)
+ recyclerView.adapter = mAdapter
+
+ if (personal) {
+ smileydown = view.findViewById(R.id.smileydown)
+ smileydowntext = view.findViewById(R.id.smileydowntext)
+ linearsmiley = view.findViewById(R.id.linearsmiley)
+ }
+
+ if (prefs.getInt("firstTimeOpening", 0) == 2) {
+ if (!prefs.getBoolean("notif", false)) {
+ pullToRefresh.isRefreshing = true
+ DataFetcher(true, false, false, mContext, activity!!.application, view.rootView).execute()
+ edit.putInt("firstTimeOpening", 3).apply()
+ }
+ }
+
+ if (prefs.getBoolean("autoRefresh", false)) {
+ pullToRefresh.isRefreshing = true
+ DataFetcher(true, false, false, mContext, activity!!.application, view.rootView).execute()
+ bottomSheetText.text = prefs.getString("informational", getString(R.string.noinfo))
+ }
+ substViewModel = ViewModelProviders.of(activity!!).get(SubstViewModel::class.java)
+ substViewModel.allSubst.observe(this, Observer> {
+ if (personal) {
+ planCardList.clear()
+ smileydown.visibility = View.GONE
+ smileydowntext.visibility = View.GONE
+ linearsmiley.visibility = View.GONE
+ persPlanEmpty = true
+ recyclerView.visibility = View.VISIBLE
+ for (i in 0 until it.size) {
+ if (prefs.getString("courses", "").isEmpty() && prefs.getString("classes", "").isNotEmpty()) {
+ if (it[i].group.toString().isNotEmpty() && !it[i].group.equals("")) {
+ if (prefs.getString("classes", "").contains(it[i].group.toString()) || it[i].group.toString().contains(prefs.getString("classes", "").toString())) {
+ planCardList.add(it[i])
+ persPlanEmpty = false
+ }
+ }
+ } else if (prefs.getString("classes", "").isNotEmpty() && prefs.getString("courses", "").isNotEmpty()) {
+ if (!it[i].group.equals("") && !it[i].course.equals("")) {
+ if (prefs.getString("courses", "").contains(it[i].course.toString())) {
+ if (prefs.getString("classes", "").contains(it[i].group.toString()) || it[i].group.toString().contains(prefs.getString("classes", "").toString())) {
+ planCardList.add(it[i])
+ persPlanEmpty = false
+ }
+ }
+ }
+ }
+// recyclerView.adapter!!.notifyDataSetChanged() // TODO check whether this is necessary
+ planCardList.sortWith(Comparator { lhs, rhs -> Integer.compare(rhs.priority, lhs.priority) })
+ recyclerView.scheduleLayoutAnimation()
+ mAdapter.setSubst(planCardList)
+ bottomSheetText.text = prefs.getString("informational", getString(R.string.noinfo))
+
+ handler.postDelayed({
+ if (persPlanEmpty) {
+ recyclerView.visibility = View.GONE
+ smileydown.visibility = View.VISIBLE
+ smileydowntext.visibility = View.VISIBLE
+ linearsmiley.visibility = View.VISIBLE
+ linearsmiley.scheduleLayoutAnimation()
+ }
+ }, 64)
+ }
+ } else {
+ mAdapter.setSubst(it)
+ recyclerView.scheduleLayoutAnimation()
+ bottomSheetText.text = prefs.getString("informational", getString(R.string.noinfo))
+ }
+ })
+
+ pullToRefresh.setOnRefreshListener {
+ pullToRefresh.isRefreshing = true
+ DataFetcher(true, false, false, mContext, activity!!.application, view.rootView).execute()
+ bottomSheetText.text = prefs.getString("informational", getString(R.string.noinfo))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt
index ec606bf..49e7530 100644
--- a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt
+++ b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt
@@ -424,8 +424,6 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
val girlCb = dateDialogView.findViewById(R.id.cb2)
val percentage = dateDialogView.findViewById(R.id.dating_txtp)
- dateDialogView.findViewById(R.id.textviewtitle).text = getString(R.string.dating)
-
datingBtn.setOnClickListener {
try {
val dg = MiscData()
diff --git a/app/src/main/res/layout/dating_dialog.xml b/app/src/main/res/layout/dating_dialog.xml
index 530c21f..6d03cce 100644
--- a/app/src/main/res/layout/dating_dialog.xml
+++ b/app/src/main/res/layout/dating_dialog.xml
@@ -14,7 +14,8 @@
android:layout_marginTop="16dp"
android:textSize="22sp"
android:layout_gravity="center_horizontal"
- android:textColor="@color/datingPink"/>
+ android:textColor="@color/datingPink"
+ android:text="@string/dating"/>