wedroid/app/src/main/java/it/unisannio/ding/ids/wedroid/app/view/BoardsListsActivity.kt

134 lines
4.5 KiB
Kotlin

package it.unisannio.ding.ids.wedroid.app.view
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import it.unisannio.ding.ids.wedroid.app.R
import it.unisannio.ding.ids.wedroid.app.util.PreferenceReader
import it.unisannio.ding.ids.wedroid.app.util.SharedPreferenceHelper
import it.unisannio.ding.ids.wedroid.app.view.adapter.BoardsListAdapter
import it.unisannio.ding.ids.wedroid.app.viewModel.BoardsListViewModel
import it.unisannio.ding.ids.wedroid.wrapper.entity.BoardBackgroundColor
import kotlinx.android.synthetic.main.activity_boards_lists.*
import kotlinx.android.synthetic.main.content_boards_lists.*
import java.util.Locale
class BoardsListsActivity : AppCompatActivity() {
private lateinit var viewModel: BoardsListViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_boards_lists)
setSupportActionBar(toolbar)
val reader: PreferenceReader = SharedPreferenceHelper(this)
if (reader.token == "")
startActivityForResult(
Intent(this, LoginActivity::class.java),
LOGIN_CODE
)
else initializeUi()
}
private fun initializeUi() {
viewModel = ViewModelProvider(this).get(BoardsListViewModel::class.java)
val adapter = BoardsListAdapter(this)
boardList.adapter = adapter
boardList.layoutManager = LinearLayoutManager(this)
viewModel.allBoards.observe(this, Observer {
it.let { adapter.setBoards(it) }
pullToRefresh.isRefreshing = false
})
swipeLeftToDelete()
fab.setOnClickListener {
startActivityForResult(
Intent(this, NewBoardActivity::class.java),
NEW_BOARD_CODE
)
}
pullToRefresh.setColorSchemeColors(getColor(R.color.colorAccent))
pullToRefresh.setOnRefreshListener {
viewModel.refresh()
}
}
private fun swipeLeftToDelete() {
val swipeToDelete = ItemTouchHelper(
object : ItemTouchHelper.SimpleCallback(
0, ItemTouchHelper.LEFT
) {
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
return false
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val pos = viewHolder.adapterPosition
viewModel.deleteBoard(pos)
}
})
swipeToDelete.attachToRecyclerView(boardList)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
LOGIN_CODE -> onLoginResult(resultCode)
NEW_BOARD_CODE -> if (data != null) onAddBoardResult(resultCode, data)
else -> finish()
}
}
private fun onLoginResult(resultCode: Int) {
when (resultCode) {
LoginActivity.LOGIN_OK -> initializeUi()
LoginActivity.LOGIN_ERROR -> finish()
else -> finish()
}
}
private fun onAddBoardResult(resultCode: Int, data: Intent) {
if (resultCode != NewBoardActivity.RESULT_OK) {
Toast.makeText(this, R.string.on_add_new_board_error, Toast.LENGTH_LONG)
.show()
return
}
val title = data.getStringExtra(NewBoardActivity.BOARD_NAME)
if (title == null) {
Toast.makeText(this, R.string.on_null_new_board_name, Toast.LENGTH_LONG)
.show()
return
}
val isPrivate = data.getBooleanExtra(NewBoardActivity.BOARD_PRIVATE, true)
val colorName = data.getStringExtra(NewBoardActivity.BOARD_BACKGROUND_COLOR) ?: "belize"
val backgroundColor = BoardBackgroundColor
.valueOf(colorName.toUpperCase(Locale.ROOT))
viewModel.insertBoard(title, isPrivate, backgroundColor)
}
companion object {
const val NEW_BOARD_CODE = 17
const val LOGIN_CODE = 19
}
}