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

Commit f7a17651 authored by Ricki Hirner's avatar Ricki Hirner
Browse files

Improve AutoComplete fields, especially in AppCompatDelegate-set dark mode

parent 0da5a967
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ dependencies {
    implementation project(':vcard4android')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'

    implementation 'androidx.appcompat:appcompat:1.3.0'
+7 −0
Original line number Diff line number Diff line
package at.bitfire.davdroid.ui

import android.app.Application
import android.content.Context
import android.text.TextUtils
import android.view.LayoutInflater
@@ -10,12 +11,18 @@ import android.widget.Filter
import android.widget.TextView
import at.bitfire.davdroid.DavUtils
import at.bitfire.davdroid.R
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.model.HomeSet

class HomeSetAdapter(
        context: Context
): ArrayAdapter<HomeSet>(context, R.layout.text_list_item, android.R.id.text1) {

    init {
        if (context is Application)
            throw IllegalArgumentException("Pass the Activity context, otherwise dark mode won't work")
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val data = getItem(position)!!

+13 −8
Original line number Diff line number Diff line
@@ -55,6 +55,17 @@ class CreateAddressBookActivity: AppCompatActivity() {
        binding.lifecycleOwner = this
        binding.model = model

        val homeSetAdapter = HomeSetAdapter(this)
        model.homeSets.observe(this) { homeSets ->
            homeSetAdapter.clear()
            if (homeSets.isNotEmpty()) {
                homeSetAdapter.addAll(homeSets)
                val firstHomeSet = homeSets.first()
                binding.homeset.setText(firstHomeSet.url.toString(), false)
                model.homeSet = firstHomeSet
            }
        }
        binding.homeset.setAdapter(homeSetAdapter)
        binding.homeset.setOnItemClickListener { parent, view, position, id ->
            model.homeSet = parent.getItemAtPosition(position) as HomeSet?
        }
@@ -124,7 +135,7 @@ class CreateAddressBookActivity: AppCompatActivity() {

        val description = MutableLiveData<String>()

        val homeSets = MutableLiveData<HomeSetAdapter>()
        val homeSets = MutableLiveData<List<HomeSet>>()
        var homeSet: HomeSet? = null

        fun clearNameError(s: Editable) {
@@ -139,16 +150,10 @@ class CreateAddressBookActivity: AppCompatActivity() {

            viewModelScope.launch(Dispatchers.IO) {
                // load account info
                val adapter = HomeSetAdapter(getApplication())

                val db = AppDatabase.getInstance(getApplication())
                db.serviceDao().getByAccountAndType(account.name, Service.TYPE_CARDDAV)?.let { service ->
                    val homeSets = db.homeSetDao().getBindableByService(service.id)
                    adapter.addAll(homeSets)
                    homeSets.postValue(db.homeSetDao().getBindableByService(service.id))
                }

                if (!adapter.isEmpty)
                    homeSets.postValue(adapter)
            }
        }

+18 −12
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ class CreateCalendarActivity: AppCompatActivity(), ColorPickerDialogListener {
        const val EXTRA_ACCOUNT = "account"
    }

    private val account by lazy { intent.getParcelableExtra<Account>(CreateAddressBookActivity.EXTRA_ACCOUNT) ?: throw IllegalArgumentException("EXTRA_ACCOUNT must be set") }
    private val account by lazy { intent.getParcelableExtra<Account>(EXTRA_ACCOUNT) ?: throw IllegalArgumentException("EXTRA_ACCOUNT must be set") }
    val model by viewModels<Model>()

    lateinit var binding: ActivityCreateCalendarBinding
@@ -71,10 +71,24 @@ class CreateCalendarActivity: AppCompatActivity(), ColorPickerDialogListener {
                    .show(this)
        }

        val homeSetAdapter = HomeSetAdapter(this)
        model.homeSets.observe(this) { homeSets ->
            homeSetAdapter.clear()
            if (homeSets.isNotEmpty()) {
                homeSetAdapter.addAll(homeSets)
                val firstHomeSet = homeSets.first()
                binding.homeset.setText(firstHomeSet.url.toString(), false)
                model.homeSet = firstHomeSet
            }
        }
        binding.homeset.setAdapter(homeSetAdapter)
        binding.homeset.setOnItemClickListener { parent, view, position, id ->
            model.homeSet = parent.getItemAtPosition(position) as HomeSet?
        }

        binding.timezone.setAdapter(TimeZoneAdapter(this))
        binding.timezone.setText(TimeZone.getDefault().id, false)

        if (savedInstanceState == null)
            model.initialize(account)
    }
@@ -136,7 +150,7 @@ class CreateCalendarActivity: AppCompatActivity(), ColorPickerDialogListener {
            args.putInt(CreateCollectionFragment.ARG_COLOR, it)
        }

        val tzId = model.timezone.value
        val tzId = binding.timezone.text?.let { it.toString() }
        if (tzId.isNullOrBlank())
            ok = false
        else {
@@ -210,11 +224,9 @@ class CreateCalendarActivity: AppCompatActivity(), ColorPickerDialogListener {
        val description = MutableLiveData<String>()
        val color = MutableLiveData<Int>()

        val homeSets = MutableLiveData<HomeSetAdapter>()
        val homeSets = MutableLiveData<List<HomeSet>>()
        var homeSet: HomeSet? = null

        val timezones = TimeZoneAdapter(application)
        val timezone = MutableLiveData(TimeZone.getDefault().id)
        val timezoneError = MutableLiveData<String>()

        val typeError = MutableLiveData<String>()
@@ -236,16 +248,10 @@ class CreateCalendarActivity: AppCompatActivity(), ColorPickerDialogListener {

            viewModelScope.launch(Dispatchers.IO) {
                // load account info
                val adapter = HomeSetAdapter(getApplication())

                val db = AppDatabase.getInstance(getApplication())
                db.serviceDao().getByAccountAndType(account.name, Service.TYPE_CALDAV)?.let { service ->
                    val homeSets = db.homeSetDao().getBindableByService(service.id)
                    adapter.addAll(homeSets)
                    homeSets.postValue(db.homeSetDao().getBindableByService(service.id))
                }

                if (!adapter.isEmpty)
                    homeSets.postValue(adapter)
            }
        }

+2 −0
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ class DefaultLoginCredentialsFragment : Fragment() {
        if (savedInstanceState == null)
            activity?.intent?.let { model.initialize(it) }

        v.loginUrlBaseUrlEdittext.setAdapter(DefaultLoginCredentialsModel.LoginUrlAdapter(requireActivity()))

        v.selectCertificate.setOnClickListener {
            KeyChain.choosePrivateKeyAlias(requireActivity(), { alias ->
                Handler(Looper.getMainLooper()).post {
Loading