From cad7b4cb3d7d1a7face3f961f0943bbeb1fca2a5 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Wed, 27 Apr 2022 19:40:55 +0200 Subject: [PATCH] add tabLayout for file types (WIP) quick&dirty, needs to be improved and might contain bugs Signed-off-by: Marcel Hibbe --- .../talk/activities/SharedItemsActivity.kt | 53 +++++++++++++++++++ .../talk/adapters/SharedItemsAdapter.kt | 3 ++ .../repositories/SharedItemsRepository.kt | 4 +- .../talk/viewmodels/SharedItemsViewModel.kt | 6 +-- .../main/res/layout/activity_shared_items.xml | 14 ++++- 5 files changed, 74 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/SharedItemsActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/SharedItemsActivity.kt index 2e08f4f65..1ef8bff34 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/SharedItemsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/SharedItemsActivity.kt @@ -5,8 +5,10 @@ import android.util.Log import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider +import com.google.android.material.tabs.TabLayout import com.nextcloud.talk.adapters.SharedItemsAdapter import com.nextcloud.talk.databinding.ActivitySharedItemsBinding +import com.nextcloud.talk.databinding.ItemReactionsTabBinding import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN @@ -32,20 +34,71 @@ class SharedItemsActivity : AppCompatActivity() { supportActionBar?.title = conversationName supportActionBar?.setDisplayHomeAsUpEnabled(true) + initTabs() + viewModel = ViewModelProvider( this, SharedItemsViewModel.Factory(userEntity, roomToken) ).get(SharedItemsViewModel::class.java) + updateItems("media") + viewModel.media.observe(this) { Log.d(TAG, "Items received: $it") val adapter = SharedItemsAdapter() adapter.items = it.items adapter.authHeader = it.authHeader binding.imageRecycler.adapter = adapter + adapter.notifyDataSetChanged() } } + fun updateItems(type: String){ + viewModel.loadMediaItems(type) + } + + private fun initTabs() { + val tabAudio: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabAudio.text = "audio" + binding.sharedItemsTabs.addTab(tabAudio) + + val tabDeckcard: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabDeckcard.text = "deckcard" + binding.sharedItemsTabs.addTab(tabDeckcard) + + val tabFile: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabFile.text = "files" + binding.sharedItemsTabs.addTab(tabFile) + + val tabLocation: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabLocation.text = "locations" + binding.sharedItemsTabs.addTab(tabLocation) + + val tabMedia: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabMedia.text = "media" + binding.sharedItemsTabs.addTab(tabMedia) + + val tabVoice: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabVoice.text = "voice" + binding.sharedItemsTabs.addTab(tabVoice) + + val tabOther: TabLayout.Tab = binding.sharedItemsTabs.newTab() + tabOther.text = "other" + binding.sharedItemsTabs.addTab(tabOther) + + binding.sharedItemsTabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + updateItems(tab.text.toString()) + } + + override fun onTabUnselected(tab: TabLayout.Tab) { + } + + override fun onTabReselected(tab: TabLayout.Tab) { + } + }) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { return if (item.itemId == android.R.id.home) { onBackPressed() diff --git a/app/src/main/java/com/nextcloud/talk/adapters/SharedItemsAdapter.kt b/app/src/main/java/com/nextcloud/talk/adapters/SharedItemsAdapter.kt index 2ef4331e5..19e147871 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/SharedItemsAdapter.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/SharedItemsAdapter.kt @@ -49,6 +49,9 @@ class SharedItemsAdapter : RecyclerView.Adapter() .setImageRequest(imageRequest) .build() holder.binding.image.controller = draweeController + + // } else if () { TODO check if voice message etc.. + } else { when (currentItem.mimeType) { "video/mp4", diff --git a/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt b/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt index afb6f80e4..3a17b0502 100644 --- a/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/repositories/SharedItemsRepository.kt @@ -27,13 +27,13 @@ class SharedItemsRepository { sharedApplication!!.componentApplication.inject(this) } - fun media(): Observable>? { + fun media(type: String): Observable>? { val credentials = ApiUtils.getCredentials(parameters!!.userName, parameters!!.userToken) return ncApi.getSharedItems( credentials, ApiUtils.getUrlForChatSharedItems(1, parameters!!.baseUrl, parameters!!.roomToken), - "media", null, null + type, null, null ) } diff --git a/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt b/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt index 183187931..e8de645a2 100644 --- a/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/viewmodels/SharedItemsViewModel.kt @@ -20,16 +20,16 @@ class SharedItemsViewModel(private val repository: SharedItemsRepository) : View private val _media: MutableLiveData by lazy { MutableLiveData().also { - loadMediaItems() + loadMediaItems("media") } } val media: LiveData get() = _media - private fun loadMediaItems() { + fun loadMediaItems(type: String) { - repository.media()?.subscribeOn(Schedulers.io()) + repository.media(type)?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(object : Observer> { diff --git a/app/src/main/res/layout/activity_shared_items.xml b/app/src/main/res/layout/activity_shared_items.xml index 0fdd7a77d..4261b7d7c 100644 --- a/app/src/main/res/layout/activity_shared_items.xml +++ b/app/src/main/res/layout/activity_shared_items.xml @@ -31,10 +31,22 @@ android:layout_height="?attr/actionBarSize" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintTop_toBottomOf="@+id/shared_items_tabs">