Plan and personal plan now use the same Kotlin class, food fragment doesnt work properly (yet)

This commit is contained in:
Deniz Düzgören
2019-05-26 11:35:36 +02:00
parent 0c043683f9
commit 9f22717e63
11 changed files with 242 additions and 51 deletions
@@ -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<Food>
private lateinit var recyclerView: RecyclerView
public val foodArrayList = ArrayList<Food>()
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<String>
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<String>(easyPrefs.getListString("foodListPrefs"))
val pullToRefresh = view.findViewById<SwipeRefreshLayout>(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()
}
}
@@ -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() {
}
@@ -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)
@@ -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()
}
}
@@ -0,0 +1,4 @@
package com.denizd.substitutionplan
class PersonalFragment {
}
@@ -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<Subst>()
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<SwipeRefreshLayout>(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<List<Subst>> {
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))
}
}
}
@@ -424,8 +424,6 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
val girlCb = dateDialogView.findViewById<CheckBox>(R.id.cb2)
val percentage = dateDialogView.findViewById<TextView>(R.id.dating_txtp)
dateDialogView.findViewById<TextView>(R.id.textviewtitle).text = getString(R.string.dating)
datingBtn.setOnClickListener {
try {
val dg = MiscData()