Added drop down menu in the settings to switch between app-specific and website original sorting procedures

This commit is contained in:
Deniz Düzgören
2019-09-24 09:32:25 +02:00
parent 1882034ec5
commit 87d4f11cba
13 changed files with 114 additions and 24 deletions
@@ -58,6 +58,7 @@ internal class DataFetcher(isPlan: Boolean, isMenu: Boolean, isJobService: Boole
private var currentFoodTime = ""
private var substUrl = "https://djd4rkn355.github.io/avh_substitutions.html"
private var foodUrl = "https://djd4rkn355.github.io/food.html"
private var websitePriority = 0
override fun doInBackground(vararg params: Void?): Void? {
try {
@@ -181,10 +182,12 @@ internal class DataFetcher(isPlan: Boolean, isMenu: Boolean, isJobService: Boole
teacher = cols[6].text(),
type = cols[7].text(),
priority = HelperFunctions.assignRanking(group, date.substring(0, 3) == "psa"),
date_priority = HelperFunctions.assignDatePriority(date)
date_priority = HelperFunctions.assignDatePriority(date),
website_priority = websitePriority
)
substArray.add(subst)
substRepo.insert(subst)
websitePriority += 1
}
var countOfNotificationItems = 0
var countOfMoreNotificationItems = 0
@@ -8,8 +8,11 @@ import com.denizd.substitutionplan.models.Substitution
@Dao
internal interface SubstDao {
@get:Query("SELECT * FROM subst_table ORDER BY date_priority ASC, priority ASC, `group` ASC, time ASC")
val allSubstitutions: LiveData<List<Substitution>>
@get:Query("SELECT * FROM subst_table ORDER BY date_priority ASC, date ASC, priority ASC, `group` ASC, time ASC")
val allSubstitutionsSorted: LiveData<List<Substitution>>
@get:Query("SELECT * FROM subst_table ORDER BY website_priority ASC")
val allSubstitutionsOriginal: LiveData<List<Substitution>>
@Insert
fun insertSubst(substitution: Substitution)
@@ -9,7 +9,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
import com.denizd.substitutionplan.models.Food
import com.denizd.substitutionplan.models.Substitution
@Database(entities = [Substitution::class, Food::class], version = 8, exportSchema = false)
@Database(entities = [Substitution::class, Food::class], version = 9, exportSchema = false)
internal abstract class SubstDatabase : RoomDatabase() {
abstract fun substDao(): SubstDao
@@ -32,6 +32,11 @@ internal abstract class SubstDatabase : RoomDatabase() {
database.execSQL("ALTER TABLE subst_table ADD COLUMN date_priority INTEGER NOT NULL DEFAULT 0")
}
}
private val addWebsitePriorityColumn = object : Migration(8, 9) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE subst_table ADD COLUMN website_priority INTEGER NOT NULL DEFAULT 0")
}
}
fun getInstance(context: Context): SubstDatabase? {
if (instance == null) {
@@ -39,7 +44,7 @@ internal abstract class SubstDatabase : RoomDatabase() {
instance = Room.databaseBuilder(context.applicationContext,
SubstDatabase::class.java,
"subst_database")
.addMigrations(addTeacherColumn, addTypeColumn, addDatePriorityColumn)
.addMigrations(addTeacherColumn, addTypeColumn, addDatePriorityColumn, addWebsitePriorityColumn)
.fallbackToDestructiveMigration()
.build()
}
@@ -9,13 +9,15 @@ import com.denizd.substitutionplan.models.Substitution
internal class SubstRepository(application: Application) {
private val substDao: SubstDao?
val allSubstitutions: LiveData<List<Substitution>>?
val allSubstitutionsSorted: LiveData<List<Substitution>>?
val allSubstitutionsOriginal: LiveData<List<Substitution>>?
init {
val database =
SubstDatabase.getInstance(application)
substDao = database?.substDao()
allSubstitutions = substDao?.allSubstitutions
allSubstitutionsSorted = substDao?.allSubstitutionsSorted
allSubstitutionsOriginal = substDao?.allSubstitutionsOriginal
}
fun insert(substitution: Substitution) {
@@ -11,11 +11,13 @@ import com.denizd.substitutionplan.models.Substitution
internal class SubstViewModel(application: Application) : AndroidViewModel(application) {
private val repository: SubstRepository = SubstRepository(application)
val allSubstitutions: LiveData<List<Substitution>>?
val allSubstitutionsSorted: LiveData<List<Substitution>>?
val allSubstitutionsOriginal: LiveData<List<Substitution>>?
private val app = application
init {
allSubstitutions = repository.allSubstitutions
allSubstitutionsSorted = repository.allSubstitutionsSorted
allSubstitutionsOriginal = repository.allSubstitutionsOriginal
}
fun refresh(swipeRefreshLayout: SwipeRefreshLayout, rootView: View, refreshMenu: Boolean) {
@@ -10,7 +10,7 @@ internal class GeneralPlanFragment : PlanFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
substViewModel.allSubstitutions?.observe(this, Observer<List<Substitution>> { substitutions ->
substitutionPlan?.observe(this, Observer<List<Substitution>> { substitutions ->
mAdapter.setSubst(substitutions)
recyclerView.scheduleLayoutAnimation()
})
@@ -19,7 +19,7 @@ internal class PersonalPlanFragment : PlanFragment() {
val coursePreference = prefs.getString("courses", "") ?: ""
val classPreference = prefs.getString("classes", "") ?: ""
substViewModel.allSubstitutions?.observe(this, Observer<List<Substitution>> { substitutions ->
substitutionPlan?.observe(this, Observer<List<Substitution>> { substitutions ->
planCardList.clear()
personalPlanEmptyEmoticon.visibility = View.GONE
personalPlanEmptyText.visibility = View.GONE
@@ -10,6 +10,7 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -21,18 +22,19 @@ import com.denizd.substitutionplan.models.Substitution
import kotlin.collections.ArrayList
internal open class PlanFragment : Fragment(R.layout.plan) {
lateinit var recyclerView: RecyclerView
lateinit var mAdapter: SubstitutionAdapter
var planCardList = ArrayList<Substitution>()
lateinit var substViewModel: SubstViewModel
internal lateinit var recyclerView: RecyclerView
internal lateinit var mAdapter: SubstitutionAdapter
internal var planCardList = ArrayList<Substitution>()
private lateinit var substViewModel: SubstViewModel
private lateinit var mContext: Context
lateinit var prefs: SharedPreferences
internal lateinit var prefs: SharedPreferences
lateinit var personalPlanEmptyEmoticon: TextView
lateinit var personalPlanEmptyText: TextView
lateinit var personalPlanEmptyLayout: LinearLayout
var isPersonalPlanEmpty: Boolean = true
val handler = Handler()
internal lateinit var personalPlanEmptyEmoticon: TextView
internal lateinit var personalPlanEmptyText: TextView
internal lateinit var personalPlanEmptyLayout: LinearLayout
internal var isPersonalPlanEmpty: Boolean = true
internal val handler = Handler()
internal var substitutionPlan: LiveData<List<Substitution>>? = null
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -48,6 +50,11 @@ internal open class PlanFragment : Fragment(R.layout.plan) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
substViewModel = ViewModelProviders.of(this).get(SubstViewModel::class.java)
substitutionPlan = if (prefs.getBoolean("app_specific_sorting", true)) {
substViewModel.allSubstitutionsSorted
} else {
substViewModel.allSubstitutionsOriginal
}
val pullToRefresh = view.findViewById<SwipeRefreshLayout>(R.id.pullToRefresh)
recyclerView = view.findViewById(R.id.linearRecycler)
@@ -86,6 +86,7 @@ internal class SettingsFragment : Fragment(R.layout.content_settings), View.OnCl
autoRefreshSwitch.setOnCheckedChangeListener(this)
helpCoursesButton.setOnClickListener(this)
helpGradeButton.setOnClickListener(this)
view.findViewById<ImageButton>(R.id.chip_help_ordering).setOnClickListener(this)
colourCustomisationButton.setOnClickListener(this)
view.findViewById<LinearLayout>(R.id.btnNoNotif).setOnClickListener(this)
view.findViewById<LinearLayout>(R.id.btnCustomiseRingtone).setOnClickListener(this)
@@ -148,6 +149,23 @@ internal class SettingsFragment : Fragment(R.layout.content_settings), View.OnCl
}
}
val orderingDropDownText = view.findViewById<AutoCompleteTextView>(R.id.order_drop_down_text)
val orderingArrayAdapter = ArrayAdapter.createFromResource(
mContext,
R.array.ordering_systems,
R.layout.dropdown_item
)
orderingArrayAdapter.setDropDownViewResource(R.layout.dropdown_item)
orderingDropDownText.setAdapter(orderingArrayAdapter)
val selectedOrderingOption = if (prefs.getBoolean("app_specific_sorting", true)) 0 else 1
orderingDropDownText.setText(orderingDropDownText.adapter.getItem(selectedOrderingOption).toString(), false)
orderingDropDownText.setOnItemClickListener { _, _, position, _ ->
prefs.edit().putBoolean("app_specific_sorting", position == 0).apply()
}
greetingSwitch.isChecked = prefs.getBoolean("greeting", true)
notificationSwitch.isChecked = prefs.getBoolean("notif", false)
@@ -437,6 +455,7 @@ internal class SettingsFragment : Fragment(R.layout.content_settings), View.OnCl
R.id.chipHelpClasses -> createDialog(getString(R.string.grade_help_dialog_title), getString(
R.string.grade_help_dialog_text
))
R.id.chip_help_ordering -> createDialog(getString(R.string.ordering_systems_dialog_title), getString(R.string.ordering_systems_dialog_text))
R.id.btnCustomiseColours -> createColourDialog()
R.id.btnNoNotif -> createDialog(mContext.getString(R.string.no_notifications_title), mContext.getString(R.string.no_notifications_dialog_text))
R.id.btnCustomiseRingtone -> createRingtoneDialog()
@@ -14,7 +14,8 @@ internal data class Substitution(
val teacher: String,
val type: String,
val priority: Int,
val date_priority: Int
val date_priority: Int,
val website_priority: Int
) {
@PrimaryKey(autoGenerate = true)