talk-android/app/src/main/java/com/nextcloud/talk/activities/SharedItemsActivity.kt
Tim Krüger 6716726ff1
Move currentTab from activity to viewmodel
Signed-off-by: Tim Krüger <t@timkrueger.me>
2022-05-23 17:35:03 +02:00

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
}
}