Skip to content

Content provider implementation with livedata and viewmodel

Notifications You must be signed in to change notification settings

abd3lraouf/ContentProviderLiveData

Repository files navigation

Content Provider with LiveData and ViewModel

Content provider implementation with livedata and viewmodel

Sample

Sample Video

Code snippets:

Usage in Activity

ViewModelProvider(this)
    .get(ContactViewModel::class.java)
    .contacts.observe(this, Observer { contacts ->
        with(contacts) {
            tvNoContacts.visibility = if (isNotEmpty()) View.GONE else View.VISIBLE
            contactAdapter.contacts = this
        }
    })

ViewModel

class ContactViewModel(
    application: Application
) : AndroidViewModel(application) {
    val contacts = ContactsLiveData(application.applicationContext)
}

LiveData

class ContactsLiveData(
    private val context: Context
) : ContentProviderLiveData<List<Contact>>(context, URI) {
    companion object {
        val URI: Uri = ContactsContract.Contacts.CONTENT_URI
        const val ID = ContactsContract.Contacts._ID
        const val DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME
    }

    override fun getContentProviderValue(): List<Contact> {
        val projection = arrayOf(ID, DISPLAY_NAME)

        return context.contentResolver
            .query(URI, projection, null, null, DISPLAY_NAME)
            .use {
                it!!
                generateSequence {
                    it.moveToNext()
                    Contact(it.getLong(0), it.getString(1))
                }.take(it.count).toList()
            }
    }
}

Credit

original repo: absolute-z3ro/Contacts

About

Content provider implementation with livedata and viewmodel

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages