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