diff --git a/app/src/main/java/net/underdesk/circolapp/SettingsActivity.kt b/app/src/main/java/net/underdesk/circolapp/SettingsActivity.kt index b033287..1ec04d0 100644 --- a/app/src/main/java/net/underdesk/circolapp/SettingsActivity.kt +++ b/app/src/main/java/net/underdesk/circolapp/SettingsActivity.kt @@ -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("school") + schoolPreference?.let { setSchoolListPreference(it) } + val schoolPreferenceListener = + Preference.OnPreferenceChangeListener { _, value -> + ServerAPI.changeServer(value.toString().toInt()) + true + } + schoolPreference?.onPreferenceChangeListener = schoolPreferenceListener + val darkThemePreference = findPreference("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("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() + val entryNames = arrayListOf() + + 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() + } } } diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt index b6bcf22..9521e50 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/CircularLetterFragment.kt @@ -47,7 +47,7 @@ class CircularLetterFragment : CircularLetterViewModelFactory( CircularRepository.getInstance( AppDatabase.getInstance(requireContext()).circularDao(), - ServerAPI.getInstance(ServerAPI.Companion.Servers.CURIE) + ServerAPI.getInstance(requireContext()) ) ) } diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt index 8119769..fbf1d1e 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/FavouritesFragment.kt @@ -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()) ) ) } diff --git a/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt b/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt index 28b1c95..e553c00 100644 --- a/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt +++ b/app/src/main/java/net/underdesk/circolapp/fragments/RemindersFragment.kt @@ -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()) ) ) } diff --git a/app/src/main/java/net/underdesk/circolapp/server/ServerAPI.kt b/app/src/main/java/net/underdesk/circolapp/server/ServerAPI.kt index 8de7159..a383458 100644 --- a/app/src/main/java/net/underdesk/circolapp/server/ServerAPI.kt +++ b/app/src/main/java/net/underdesk/circolapp/server/ServerAPI.kt @@ -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, 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() + } } } diff --git a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt index 08216bb..ce1f13d 100644 --- a/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt +++ b/app/src/main/java/net/underdesk/circolapp/works/PollWork.kt @@ -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() diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 114ed44..0a39da1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -11,6 +11,7 @@ Generale Notifiche + Scuola Tema scuro Mostra notifiche Intervallo di sincronizzazione diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 29f12ff..8d74426 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,6 +11,7 @@ General Notifications + School Dark theme Show notifications Synchronization interval diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 5495f76..9c3cb6c 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -3,6 +3,11 @@ + +