Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f47798c authored by Ricki Hirner's avatar Ricki Hirner
Browse files

Minor refactoring: About, styles

parent 1ed91ff1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ class SettingsManager private constructor(
    /**
     * Requests all providers to reload their settings.
     */
    @AnyThread
    fun forceReload() {
        for (provider in providers)
            provider.forceReload()
@@ -73,6 +74,7 @@ class SettingsManager private constructor(
     * Notifies registered listeners about changes in the configuration.
     * Should be called by config providers when settings have changed.
     */
    @AnyThread
    fun onSettingsChanged() {
        synchronized(observers) {
            for (observer in observers.mapNotNull { it.get() })
+2 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@

package at.bitfire.davdroid.settings

import androidx.annotation.AnyThread
import java.io.Writer

/**
@@ -30,6 +31,7 @@ interface SettingsProvider {

    fun close()

    @AnyThread
    fun forceReload()

    fun contains(key: String): Boolean
+48 −33
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.fragment.app.viewModels
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import androidx.recyclerview.widget.LinearLayoutManager
@@ -68,7 +69,7 @@ class AboutActivity: AppCompatActivity() {
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.about_davdroid, menu)
        menuInflater.inflate(R.menu.activity_about, menu)
        return true
    }

@@ -141,51 +142,25 @@ class AboutActivity: AppCompatActivity() {

    class LanguagesFragment: Fragment() {

        val model by viewModels<TextFileModel>()
        val model by viewModels<TranslationsModel>()

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) =
                inflater.inflate(R.layout.about_languages, container, false)!!

        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            model.initialize("translators.json", false)
            model.plainText.observe(viewLifecycleOwner, { json ->
                val jsonTranslations = JSONObject(json)
                translators.adapter = TranslationsAdapter(jsonTranslations)
            model.translations.observe(viewLifecycleOwner, { translations ->
                translators.adapter = TranslationsAdapter(translations)
            })

            translators.layoutManager = LinearLayoutManager(requireActivity())
        }

        class Translation(
                val language: String,
                val translators: Array<String>
        )

        class TranslationsAdapter(
                jsonTranslations: JSONObject
                val translations: List<TranslationsModel.Translation>
        ): RecyclerView.Adapter<TranslationsAdapter.ViewHolder>() {
            class ViewHolder(val cardView: CardView): RecyclerView.ViewHolder(cardView)

            private val translations = LinkedList<Translation>()

            init {
                for (langCode in jsonTranslations.keys()) {
                    val jsonTranslators = jsonTranslations.getJSONArray(langCode)
                    val translators = Array<String>(jsonTranslators.length()) {
                        idx -> jsonTranslators.getString(idx)
                    }

                    val langTag = langCode.replace('_', '-')
                    val language = Locale.forLanguageTag(langTag).displayName
                    translations += Translation(language, translators)
                }

                // sort translations by localized language name
                val collator = Collator.getInstance()
                translations.sortWith({
                    o1, o2 -> collator.compare(o1.language, o2.language)
                })
            }
            class ViewHolder(val cardView: CardView): RecyclerView.ViewHolder(cardView)

            override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
                val tv = LayoutInflater.from(parent.context).inflate(R.layout.about_translation, parent, false) as CardView
@@ -210,7 +185,7 @@ class AboutActivity: AppCompatActivity() {
    }


    class TextFileModel(
    open class TextFileModel(
            application: Application
    ): AndroidViewModel(application) {

@@ -237,4 +212,44 @@ class AboutActivity: AppCompatActivity() {

    }

    class TranslationsModel(
            application: Application
    ): TextFileModel(application) {

        class Translation(
                val language: String,
                val translators: Array<String>
        )

        val translations = object: MediatorLiveData<List<Translation>>() {
            init {
                addSource(plainText) { rawJson ->
                    // parse JSON
                    val jsonTranslations = JSONObject(rawJson)
                    val result = LinkedList<Translation>()
                    for (langCode in jsonTranslations.keys()) {
                        val jsonTranslators = jsonTranslations.getJSONArray(langCode)
                        val translators = Array<String>(jsonTranslators.length()) {
                            idx -> jsonTranslators.getString(idx)
                        }

                        val langTag = langCode.replace('_', '-')
                        val language = Locale.forLanguageTag(langTag).displayName
                        result += Translation(language, translators)
                    }

                    // sort translations by localized language name
                    val collator = Collator.getInstance()
                    result.sortWith({
                        o1, o2 -> collator.compare(o1.language, o2.language)
                    })

                    postValue(result)
                }
            }
        }

    }


}
+2 −1
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ class AccountsActivity: AppCompatActivity(), NavigationView.OnNavigationItemSele
        }
        fab.show()

        accountsDrawerHandler.initMenu(this, drawer_layout.nav_view.menu)
        val toggle = ActionBarDrawerToggle(
                this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        drawer_layout.addDrawerListener(toggle)
@@ -85,6 +84,8 @@ class AccountsActivity: AppCompatActivity(), NavigationView.OnNavigationItemSele
    override fun onResume() {
        super.onResume()

        accountsDrawerHandler.initMenu(this, drawer_layout.nav_view.menu)

        onStatusChanged(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS)
        syncStatusObserver = ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this)
    }
+2 −1
Original line number Diff line number Diff line
@@ -5,7 +5,8 @@
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:contentPadding="@dimen/card_padding"
    android:layout_marginBottom="16dp">
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp">

    <LinearLayout
        android:layout_width="match_parent"
Loading