Add option to change school from SettingsActivity

This commit is contained in:
2020-10-24 15:32:47 +02:00
committed by Matte23
parent ddacff0892
commit 109c56d111
9 changed files with 69 additions and 16 deletions

View File

@@ -22,11 +22,9 @@ import android.os.Bundle
import android.text.InputType import android.text.InputType
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.EditTextPreference import androidx.preference.*
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import kotlinx.android.synthetic.main.settings_activity.* import kotlinx.android.synthetic.main.settings_activity.*
import net.underdesk.circolapp.server.ServerAPI
import net.underdesk.circolapp.works.PollWork import net.underdesk.circolapp.works.PollWork
class SettingsActivity : AppCompatActivity() { class SettingsActivity : AppCompatActivity() {
@@ -46,8 +44,17 @@ class SettingsActivity : AppCompatActivity() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey) 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 darkThemePreference = findPreference<Preference>("dark_theme")
val listener = val themePreferenceListener =
Preference.OnPreferenceChangeListener { _, value -> Preference.OnPreferenceChangeListener { _, value ->
when (value) { when (value) {
"auto" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) "auto" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
@@ -56,7 +63,7 @@ class SettingsActivity : AppCompatActivity() {
} }
true true
} }
darkThemePreference?.onPreferenceChangeListener = listener darkThemePreference?.onPreferenceChangeListener = themePreferenceListener
val pollIntervalPreference = findPreference<EditTextPreference>("poll_interval") val pollIntervalPreference = findPreference<EditTextPreference>("poll_interval")
pollIntervalPreference?.setOnBindEditTextListener { editText -> pollIntervalPreference?.setOnBindEditTextListener { editText ->
@@ -74,5 +81,20 @@ class SettingsActivity : AppCompatActivity() {
pollIntervalPreference?.onPreferenceChangeListener = notificationPrefChangedListener pollIntervalPreference?.onPreferenceChangeListener = notificationPrefChangedListener
notificationPreference?.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()
}
} }
} }

View File

@@ -47,7 +47,7 @@ class CircularLetterFragment :
CircularLetterViewModelFactory( CircularLetterViewModelFactory(
CircularRepository.getInstance( CircularRepository.getInstance(
AppDatabase.getInstance(requireContext()).circularDao(), AppDatabase.getInstance(requireContext()).circularDao(),
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE) ServerAPI.getInstance(requireContext())
) )
) )
} }

View File

@@ -41,7 +41,7 @@ class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
FavouritesViewModelFactory( FavouritesViewModelFactory(
CircularRepository.getInstance( CircularRepository.getInstance(
AppDatabase.getInstance(requireContext()).circularDao(), AppDatabase.getInstance(requireContext()).circularDao(),
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE) ServerAPI.getInstance(requireContext())
) )
) )
} }

View File

@@ -41,7 +41,7 @@ class RemindersFragment : Fragment(), MainActivity.SearchCallback {
RemindersViewModelFactory( RemindersViewModelFactory(
CircularRepository.getInstance( CircularRepository.getInstance(
AppDatabase.getInstance(requireContext()).circularDao(), AppDatabase.getInstance(requireContext()).circularDao(),
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE) ServerAPI.getInstance(requireContext())
) )
) )
} }

View File

@@ -18,12 +18,14 @@
package net.underdesk.circolapp.server package net.underdesk.circolapp.server
import android.content.Context
import androidx.preference.PreferenceManager
import net.underdesk.circolapp.data.Circular import net.underdesk.circolapp.data.Circular
import net.underdesk.circolapp.server.curie.CurieServer import net.underdesk.circolapp.server.curie.CurieServer
import net.underdesk.circolapp.server.porporato.PorporatoServer import net.underdesk.circolapp.server.porporato.PorporatoServer
class ServerAPI( class ServerAPI(
private val server: Server private var server: Server
) { ) {
suspend fun getCircularsFromServer(): Pair<List<Circular>, Result> { suspend fun getCircularsFromServer(): Pair<List<Circular>, Result> {
val newCircularsAvailable = server.newCircularsAvailable() val newCircularsAvailable = server.newCircularsAvailable()
@@ -37,6 +39,10 @@ class ServerAPI(
return server.getCircularsFromServer() return server.getCircularsFromServer()
} }
fun changeServer(server: Server) {
this.server = server
}
companion object { companion object {
enum class Servers { enum class Servers {
CURIE, PORPORATO CURIE, PORPORATO
@@ -46,20 +52,38 @@ class ServerAPI(
SUCCESS, ERROR SUCCESS, ERROR
} }
fun getServerName(server: Servers) = when (server) {
Servers.CURIE -> "Liceo scientifico Maria Curie"
Servers.PORPORATO -> "Liceo G.F. Porporato"
}
@Volatile @Volatile
private var instance: ServerAPI? = null private var instance: ServerAPI? = null
fun getInstance(server: Servers): ServerAPI { fun getInstance(server: Servers): ServerAPI {
return instance ?: synchronized(this) { return instance ?: synchronized(this) {
instance ?: createServerAPI(server).also { instance = it } instance ?: ServerAPI(createServer(server)).also { instance = it }
} }
} }
private fun createServerAPI(server: Servers): ServerAPI { fun getInstance(context: Context): ServerAPI {
return when (server) { val server = Servers.values()[
Servers.CURIE -> ServerAPI(CurieServer()) PreferenceManager.getDefaultSharedPreferences(context).getString("school", "0")
Servers.PORPORATO -> ServerAPI(PorporatoServer()) ?.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()
}
} }
} }

View File

@@ -87,7 +87,7 @@ class PollWork(appContext: Context, workerParams: WorkerParameters) :
override suspend fun doWork(): Result = coroutineScope { override suspend fun doWork(): Result = coroutineScope {
val circularRepository = CircularRepository.getInstance( val circularRepository = CircularRepository.getInstance(
AppDatabase.getInstance(applicationContext).circularDao(), AppDatabase.getInstance(applicationContext).circularDao(),
ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE) ServerAPI.getInstance(applicationContext)
) )
val result = circularRepository.updateCirculars() val result = circularRepository.updateCirculars()

View File

@@ -11,6 +11,7 @@
<string name="preferences_general_header">Generale</string> <string name="preferences_general_header">Generale</string>
<string name="preference_notifications_header">Notifiche</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_dark_theme">Tema scuro</string>
<string name="preferences_notify_new_circulars">Mostra notifiche</string> <string name="preferences_notify_new_circulars">Mostra notifiche</string>
<string name="preferences_poll_interval">Intervallo di sincronizzazione</string> <string name="preferences_poll_interval">Intervallo di sincronizzazione</string>

View File

@@ -11,6 +11,7 @@
<string name="preferences_general_header">General</string> <string name="preferences_general_header">General</string>
<string name="preference_notifications_header">Notifications</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_dark_theme">Dark theme</string>
<string name="preferences_notify_new_circulars">Show notifications</string> <string name="preferences_notify_new_circulars">Show notifications</string>
<string name="preferences_poll_interval">Synchronization interval</string> <string name="preferences_poll_interval">Synchronization interval</string>

View File

@@ -3,6 +3,11 @@
<PreferenceCategory app:title="@string/preferences_general_header"> <PreferenceCategory app:title="@string/preferences_general_header">
<ListPreference
app:key="school"
app:title="@string/preferences_school"
app:useSimpleSummaryProvider="true" />
<ListPreference <ListPreference
app:defaultValue="auto" app:defaultValue="auto"
app:entries="@array/dark_theme_entries" app:entries="@array/dark_theme_entries"