mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Add option to change school from SettingsActivity
This commit is contained in:
@@ -22,11 +22,9 @@ import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import androidx.preference.*
|
||||
import kotlinx.android.synthetic.main.settings_activity.*
|
||||
import net.underdesk.circolapp.server.ServerAPI
|
||||
import net.underdesk.circolapp.works.PollWork
|
||||
|
||||
class SettingsActivity : AppCompatActivity() {
|
||||
@@ -46,8 +44,17 @@ class SettingsActivity : AppCompatActivity() {
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.root_preferences, rootKey)
|
||||
|
||||
val schoolPreference = findPreference<ListPreference>("school")
|
||||
schoolPreference?.let { setSchoolListPreference(it) }
|
||||
val schoolPreferenceListener =
|
||||
Preference.OnPreferenceChangeListener { _, value ->
|
||||
ServerAPI.changeServer(value.toString().toInt())
|
||||
true
|
||||
}
|
||||
schoolPreference?.onPreferenceChangeListener = schoolPreferenceListener
|
||||
|
||||
val darkThemePreference = findPreference<Preference>("dark_theme")
|
||||
val listener =
|
||||
val themePreferenceListener =
|
||||
Preference.OnPreferenceChangeListener { _, value ->
|
||||
when (value) {
|
||||
"auto" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
@@ -56,7 +63,7 @@ class SettingsActivity : AppCompatActivity() {
|
||||
}
|
||||
true
|
||||
}
|
||||
darkThemePreference?.onPreferenceChangeListener = listener
|
||||
darkThemePreference?.onPreferenceChangeListener = themePreferenceListener
|
||||
|
||||
val pollIntervalPreference = findPreference<EditTextPreference>("poll_interval")
|
||||
pollIntervalPreference?.setOnBindEditTextListener { editText ->
|
||||
@@ -74,5 +81,20 @@ class SettingsActivity : AppCompatActivity() {
|
||||
pollIntervalPreference?.onPreferenceChangeListener = notificationPrefChangedListener
|
||||
notificationPreference?.onPreferenceChangeListener = notificationPrefChangedListener
|
||||
}
|
||||
|
||||
private fun setSchoolListPreference(listPreference: ListPreference) {
|
||||
val servers = ServerAPI.Companion.Servers.values()
|
||||
val entryValues = arrayListOf<CharSequence>()
|
||||
val entryNames = arrayListOf<CharSequence>()
|
||||
|
||||
for (i in servers.indices) {
|
||||
entryValues.add(i.toString())
|
||||
entryNames.add(ServerAPI.getServerName(servers[i]))
|
||||
}
|
||||
|
||||
listPreference.setDefaultValue("0")
|
||||
listPreference.entryValues = entryValues.toTypedArray()
|
||||
listPreference.entries = entryNames.toTypedArray()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ class CircularLetterFragment :
|
||||
CircularLetterViewModelFactory(
|
||||
CircularRepository.getInstance(
|
||||
AppDatabase.getInstance(requireContext()).circularDao(),
|
||||
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE)
|
||||
ServerAPI.getInstance(requireContext())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
||||
FavouritesViewModelFactory(
|
||||
CircularRepository.getInstance(
|
||||
AppDatabase.getInstance(requireContext()).circularDao(),
|
||||
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE)
|
||||
ServerAPI.getInstance(requireContext())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
||||
RemindersViewModelFactory(
|
||||
CircularRepository.getInstance(
|
||||
AppDatabase.getInstance(requireContext()).circularDao(),
|
||||
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE)
|
||||
ServerAPI.getInstance(requireContext())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
|
||||
package net.underdesk.circolapp.server
|
||||
|
||||
import android.content.Context
|
||||
import androidx.preference.PreferenceManager
|
||||
import net.underdesk.circolapp.data.Circular
|
||||
import net.underdesk.circolapp.server.curie.CurieServer
|
||||
import net.underdesk.circolapp.server.porporato.PorporatoServer
|
||||
|
||||
class ServerAPI(
|
||||
private val server: Server
|
||||
private var server: Server
|
||||
) {
|
||||
suspend fun getCircularsFromServer(): Pair<List<Circular>, Result> {
|
||||
val newCircularsAvailable = server.newCircularsAvailable()
|
||||
@@ -37,6 +39,10 @@ class ServerAPI(
|
||||
return server.getCircularsFromServer()
|
||||
}
|
||||
|
||||
fun changeServer(server: Server) {
|
||||
this.server = server
|
||||
}
|
||||
|
||||
companion object {
|
||||
enum class Servers {
|
||||
CURIE, PORPORATO
|
||||
@@ -46,20 +52,38 @@ class ServerAPI(
|
||||
SUCCESS, ERROR
|
||||
}
|
||||
|
||||
fun getServerName(server: Servers) = when (server) {
|
||||
Servers.CURIE -> "Liceo scientifico Maria Curie"
|
||||
Servers.PORPORATO -> "Liceo G.F. Porporato"
|
||||
}
|
||||
|
||||
@Volatile
|
||||
private var instance: ServerAPI? = null
|
||||
|
||||
fun getInstance(server: Servers): ServerAPI {
|
||||
return instance ?: synchronized(this) {
|
||||
instance ?: createServerAPI(server).also { instance = it }
|
||||
instance ?: ServerAPI(createServer(server)).also { instance = it }
|
||||
}
|
||||
}
|
||||
|
||||
private fun createServerAPI(server: Servers): ServerAPI {
|
||||
return when (server) {
|
||||
Servers.CURIE -> ServerAPI(CurieServer())
|
||||
Servers.PORPORATO -> ServerAPI(PorporatoServer())
|
||||
}
|
||||
fun getInstance(context: Context): ServerAPI {
|
||||
val server = Servers.values()[
|
||||
PreferenceManager.getDefaultSharedPreferences(context).getString("school", "0")
|
||||
?.toInt() ?: 0
|
||||
]
|
||||
|
||||
return instance ?: synchronized(this) {
|
||||
instance ?: ServerAPI(createServer(server)).also { instance = it }
|
||||
}
|
||||
}
|
||||
|
||||
fun changeServer(index: Int) {
|
||||
instance?.changeServer(createServer(Servers.values()[index]))
|
||||
}
|
||||
|
||||
private fun createServer(server: Servers) = when (server) {
|
||||
Servers.CURIE -> CurieServer()
|
||||
Servers.PORPORATO -> PorporatoServer()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ class PollWork(appContext: Context, workerParams: WorkerParameters) :
|
||||
override suspend fun doWork(): Result = coroutineScope {
|
||||
val circularRepository = CircularRepository.getInstance(
|
||||
AppDatabase.getInstance(applicationContext).circularDao(),
|
||||
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE)
|
||||
ServerAPI.getInstance(applicationContext)
|
||||
)
|
||||
|
||||
val result = circularRepository.updateCirculars()
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
<string name="preferences_general_header">Generale</string>
|
||||
<string name="preference_notifications_header">Notifiche</string>
|
||||
<string name="preferences_school">Scuola</string>
|
||||
<string name="preferences_dark_theme">Tema scuro</string>
|
||||
<string name="preferences_notify_new_circulars">Mostra notifiche</string>
|
||||
<string name="preferences_poll_interval">Intervallo di sincronizzazione</string>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
<string name="preferences_general_header">General</string>
|
||||
<string name="preference_notifications_header">Notifications</string>
|
||||
<string name="preferences_school">School</string>
|
||||
<string name="preferences_dark_theme">Dark theme</string>
|
||||
<string name="preferences_notify_new_circulars">Show notifications</string>
|
||||
<string name="preferences_poll_interval">Synchronization interval</string>
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
|
||||
<PreferenceCategory app:title="@string/preferences_general_header">
|
||||
|
||||
<ListPreference
|
||||
app:key="school"
|
||||
app:title="@string/preferences_school"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<ListPreference
|
||||
app:defaultValue="auto"
|
||||
app:entries="@array/dark_theme_entries"
|
||||
|
||||
Reference in New Issue
Block a user