ChatRoomsFragment.kt 5.27 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
package chat.rocket.android.chatrooms.ui

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.DividerItemDecoration
import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import chat.rocket.android.R
import chat.rocket.android.chatrooms.presentation.ChatRoomsPresenter
import chat.rocket.android.chatrooms.presentation.ChatRoomsView
import chat.rocket.core.model.ChatRoom
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.fragment_chat_rooms.*
import javax.inject.Inject

class ChatRoomsFragment : Fragment(), ChatRoomsView {
    @Inject lateinit var presenter: ChatRoomsPresenter

    companion object {
        fun newInstance() = ChatRoomsFragment()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        AndroidSupportInjection.inject(this)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.fragment_chat_rooms, container, false)

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        presenter.getChatRooms()
    }

//    // This is just a sample showing 8 chat rooms (aka user subscription). We need to get it rid in a real word. REMARK: remove this comment and this method.
//    private fun createDumpData(): List<Chat> {
//        val filipe = User("1", "Filipe Brito", "filipe.brito", "online", "https://open.rocket.chat/avatar/filipe.brito")
//        val lucio = User("2", "Lucio Maciel", "Lucio Maciel", "busy", "https://open.rocket.chat/avatar/lucio.maciel")
//        val leonardo = User("3", "Leonardo Aramaki", "leonardo.aramaki", "busy", "https://open.rocket.chat/avatar/leonardo.aramaki")
//        val sing = User("4", "Filipe Brito", "filipe.brito", "online", "https://open.rocket.chat/avatar/filipe.brito")
//        val hetal = User("5", "Filipe Brito", "filipe.brito", "online", "https://open.rocket.chat/avatar/filipe.brito")
//        val matheus = User("6", "Filipe Brito", "filipe.brito", "online", "https://open.rocket.chat/avatar/filipe.brito")
//        val bestrun = User("7", "Filipe Brito", "filipe.brito", "online", "https://open.rocket.chat/avatar/filipe.brito")
//        val djc = User("8", "3djc", "3djc", "online", "https://open.rocket.chat/avatar/filipe.brito")
//
//        val dumpChat1 = Chat(leonardo, "Leonardo Aramaki", "d", "Type something", LocalDateTime.of(2017, 11, 21, 1, 3), 1)
//        val dumpChat2 = Chat(filipe, "Filipe Brito", "d", "Type something...Type something...Type something", LocalDateTime.of(2017, 11, 22, 1, 3), 150)
//        val dumpChat3 = Chat(lucio, "Lucio Maciel", "d", "Type something", LocalDateTime.of(2017, 11, 17, 1, 3), 0)
//        val dumpChat4 = Chat(sing, "mobile-internal", "p", "@aaron.ogle @rafael.kellermann same problem over here. Although all the servers show up on the selection.", LocalDateTime.of(2017, 11, 15, 1, 3), 0)
//        val dumpChat5 = Chat(hetal, "general", "c", "Has joined the channel.", LocalDateTime.of(2017, 11, 13, 1, 3), 0)
//        val dumpChat6 = Chat(matheus, "androidnativeapp", "c", "Yes @sttyru, but you'll need to implement from the ground up following the docs at docs.rocket.chat where you can see the REST (HTTP) and Real-Time (WebSockets) calls.", LocalDateTime.of(2017, 11, 14, 1, 3), 0)
//        val dumpChat7 = Chat(bestrun, "androidnativeapp-2", "c", "Just downloaded .zip and imported into Android Studio then build the project.", LocalDateTime.of(2017, 11, 4, 12, 47), 0)
//        val dumpChat8 = Chat(djc, "iosnativeapp", "c", "Ok, got confused by the blog announcement that shows a screenshot with github oAuth ! Sorry !", LocalDateTime.of(2017, 11, 4, 12, 43), 0)
//
//        // creates a list of chat sorted by lastMessageDateTime attribute.
//        return listOf(dumpChat1, dumpChat2, dumpChat3, dumpChat4, dumpChat5, dumpChat6, dumpChat7, dumpChat8).sortedByDescending { chat -> chat.lastMessageDateTime }
//    }

    // REMARK: The presenter should call this method. The presenter also need to sort the chat list by latest message (compared by its date).
//    private fun showChatList(dataSet: List<Chat>) {
//        activity?.apply {
//            recycler_view.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
//            recycler_view.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
//            recycler_view.adapter = ChatRoomsAdapter(dataSet.toMutableList(), this)
//        }
//    }

    override fun showChatRooms(dataSet: MutableList<ChatRoom>) {
        activity?.apply {
            recycler_view.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
            recycler_view.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
            recycler_view.adapter = ChatRoomsAdapter(dataSet, this)
        }
    }

    override fun showLoading() {
        view_loading.show()
    }

    override fun hideLoading() {
        view_loading.hide()
    }

    override fun showMessage(message: String) {
        Toast.makeText(activity, message, Toast.LENGTH_SHORT).show()
    }
}