mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-17 01:35:03 +01:00
173 lines
6.7 KiB
Kotlin
173 lines
6.7 KiB
Kotlin
package com.nextcloud.talk.activities
|
|
|
|
import android.os.Bundle
|
|
import android.util.Log
|
|
import android.view.MenuItem
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.core.content.res.ResourcesCompat
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.recyclerview.widget.GridLayoutManager
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import com.google.android.material.tabs.TabLayout
|
|
import com.nextcloud.talk.R
|
|
import com.nextcloud.talk.adapters.SharedItemsGridAdapter
|
|
import com.nextcloud.talk.adapters.SharedItemsListAdapter
|
|
import com.nextcloud.talk.databinding.ActivitySharedItemsBinding
|
|
import com.nextcloud.talk.models.database.UserEntity
|
|
import com.nextcloud.talk.repositories.SharedItemType
|
|
import com.nextcloud.talk.utils.DisplayUtils
|
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME
|
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
|
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY
|
|
import com.nextcloud.talk.viewmodels.SharedItemsViewModel
|
|
|
|
class SharedItemsActivity : AppCompatActivity() {
|
|
|
|
private lateinit var binding: ActivitySharedItemsBinding
|
|
private lateinit var viewModel: SharedItemsViewModel
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
val roomToken = intent.getStringExtra(KEY_ROOM_TOKEN)!!
|
|
val conversationName = intent.getStringExtra(KEY_CONVERSATION_NAME)
|
|
val userEntity = intent.getParcelableExtra<UserEntity>(KEY_USER_ENTITY)!!
|
|
|
|
binding = ActivitySharedItemsBinding.inflate(layoutInflater)
|
|
setSupportActionBar(binding.sharedItemsToolbar)
|
|
setContentView(binding.root)
|
|
|
|
DisplayUtils.applyColorToStatusBar(
|
|
this,
|
|
ResourcesCompat.getColor(
|
|
resources, R.color.appbar, null
|
|
)
|
|
)
|
|
DisplayUtils.applyColorToNavigationBar(
|
|
this.window,
|
|
ResourcesCompat.getColor(resources, R.color.bg_default, null)
|
|
)
|
|
|
|
supportActionBar?.title = conversationName
|
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
|
|
|
viewModel = ViewModelProvider(
|
|
this,
|
|
SharedItemsViewModel.Factory(userEntity, roomToken, SharedItemType.MEDIA)
|
|
).get(SharedItemsViewModel::class.java)
|
|
|
|
viewModel.sharedItemTypes.observe(this) {
|
|
initTabs(it)
|
|
}
|
|
|
|
viewModel.sharedItems.observe(this) {
|
|
Log.d(TAG, "Items received: $it")
|
|
|
|
if (viewModel.currentItemType == SharedItemType.MEDIA) {
|
|
val adapter = SharedItemsGridAdapter()
|
|
adapter.items = it.items
|
|
adapter.authHeader = it.authHeader
|
|
binding.imageRecycler.adapter = adapter
|
|
|
|
val layoutManager = GridLayoutManager(this, SPAN_COUNT)
|
|
binding.imageRecycler.layoutManager = layoutManager
|
|
} else {
|
|
val adapter = SharedItemsListAdapter()
|
|
adapter.items = it.items
|
|
adapter.authHeader = it.authHeader
|
|
binding.imageRecycler.adapter = adapter
|
|
|
|
val layoutManager = LinearLayoutManager(this)
|
|
layoutManager.orientation = LinearLayoutManager.VERTICAL
|
|
binding.imageRecycler.layoutManager = layoutManager
|
|
}
|
|
}
|
|
|
|
binding.imageRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
|
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
|
super.onScrollStateChanged(recyclerView, newState)
|
|
if (!recyclerView.canScrollVertically(1) && newState == RecyclerView.SCROLL_STATE_IDLE) {
|
|
viewModel.loadNextItems()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
private fun initTabs(sharedItemTypes: Set<SharedItemType>) {
|
|
|
|
if (sharedItemTypes.contains(SharedItemType.MEDIA)) {
|
|
val tabMedia: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
tabMedia.tag = SharedItemType.MEDIA
|
|
tabMedia.setText(R.string.shared_items_media)
|
|
binding.sharedItemsTabs.addTab(tabMedia)
|
|
}
|
|
|
|
if (sharedItemTypes.contains(SharedItemType.FILE)) {
|
|
val tabFile: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
tabFile.tag = SharedItemType.FILE
|
|
tabFile.setText(R.string.shared_items_file)
|
|
binding.sharedItemsTabs.addTab(tabFile)
|
|
}
|
|
|
|
if (sharedItemTypes.contains(SharedItemType.AUDIO)) {
|
|
val tabAudio: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
tabAudio.tag = SharedItemType.AUDIO
|
|
tabAudio.setText(R.string.shared_items_audio)
|
|
binding.sharedItemsTabs.addTab(tabAudio)
|
|
}
|
|
|
|
if (sharedItemTypes.contains(SharedItemType.VOICE)) {
|
|
val tabVoice: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
tabVoice.tag = SharedItemType.VOICE
|
|
tabVoice.setText(R.string.shared_items_voice)
|
|
binding.sharedItemsTabs.addTab(tabVoice)
|
|
}
|
|
|
|
// if(sharedItemTypes.contains(SharedItemType.LOCATION)) {
|
|
// val tabLocation: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
// tabLocation.tag = SharedItemType.LOCATION
|
|
// tabLocation.text = "location"
|
|
// binding.sharedItemsTabs.addTab(tabLocation)
|
|
// }
|
|
|
|
// if(sharedItemTypes.contains(SharedItemType.DECKCARD)) {
|
|
// val tabDeckCard: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
// tabDeckCard.tag = SharedItemType.DECKCARD
|
|
// tabDeckCard.text = "deckcard"
|
|
// binding.sharedItemsTabs.addTab(tabDeckCard)
|
|
// }
|
|
|
|
// if(sharedItemTypes.contains(SharedItemType.OTHER)) {
|
|
// val tabOther: TabLayout.Tab = binding.sharedItemsTabs.newTab()
|
|
// tabOther.tag = SharedItemType.OTHER
|
|
// tabOther.setText(R.string.shared_items_other)
|
|
// binding.sharedItemsTabs.addTab(tabOther)
|
|
// }
|
|
|
|
binding.sharedItemsTabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
|
override fun onTabSelected(tab: TabLayout.Tab) {
|
|
viewModel.loadItems(tab.tag as SharedItemType)
|
|
}
|
|
|
|
override fun onTabUnselected(tab: TabLayout.Tab) = Unit
|
|
|
|
override fun onTabReselected(tab: TabLayout.Tab) = Unit
|
|
})
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
return if (item.itemId == android.R.id.home) {
|
|
onBackPressed()
|
|
true
|
|
} else {
|
|
super.onOptionsItemSelected(item)
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
private val TAG = SharedItemsActivity::class.simpleName
|
|
const val SPAN_COUNT: Int = 4
|
|
}
|
|
}
|