Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 7.64 KB | None | 0 0
  1. package com.example.ad.retrofittest.Chat
  2.  
  3. import android.os.Bundle
  4. import android.support.v7.app.AppCompatActivity
  5. import android.support.v7.widget.LinearLayoutManager
  6. import android.support.v7.widget.RecyclerView
  7. import android.text.TextUtils
  8. import android.util.Log
  9. import android.view.View
  10. import android.widget.EditText
  11. import android.widget.ProgressBar
  12.  
  13. import com.example.ad.retrofittest.Account.Login
  14. import com.example.ad.retrofittest.Common_Clases.ErrorHandler.CallbackWrapper
  15. import com.example.ad.retrofittest.Maps.MainMap
  16. import com.example.ad.retrofittest.Model.Chat.ChatModel
  17. import com.example.ad.retrofittest.Model.UserNewModel.User
  18. import com.example.ad.retrofittest.Profile.Profile
  19. import com.example.ad.retrofittest.R
  20. import com.example.ad.retrofittest.Retrofit.ApiUtils
  21. import com.example.ad.retrofittest.Retrofit.Services.NewServices
  22. import com.github.nkzawa.emitter.Emitter
  23. import com.github.nkzawa.socketio.client.IO
  24. import com.github.nkzawa.socketio.client.Socket
  25. import io.reactivex.android.schedulers.AndroidSchedulers
  26. import io.reactivex.schedulers.Schedulers
  27.  
  28. import org.json.JSONException
  29. import org.json.JSONObject
  30.  
  31. import java.net.URISyntaxException
  32.  
  33. import java.util.ArrayList
  34.  
  35. class Chat : AppCompatActivity() {
  36.     private var recyclerView: RecyclerView? = null
  37.     private var layoutManager: LinearLayoutManager? = null
  38.     private var adapter: RecyclerAdapterChat? = null
  39.     private var chatApiService: NewServices? = null
  40.     private var inputMessage: EditText? = null
  41.     private var userId: Int = 0
  42.     private var mSocket: Socket? = null
  43.  
  44.     private var isLoading = true
  45.     private var pastVisibleItems = 0
  46.     private var  visibleItemCount = 0
  47.     private var totalItemCount = 0
  48.     private var previousTotal = 0
  49.     private var viewTreshold = 0
  50.     private var counter = 2
  51.     private var progressBar: ProgressBar? = null
  52.     private var chatId = 0
  53.  
  54.     private val onNewMessage = Emitter.Listener { args ->
  55.         this@Chat.runOnUiThread(Runnable {
  56.             var data: ChatModel? = null
  57.             try {
  58.                 data = args[0] as ChatModel
  59.             } catch (e: JSONException) {
  60.                 Log.i("asdfgtrwe", e.toString())
  61.                 return@Runnable
  62.             }
  63.  
  64.             // add the message to view
  65.             //  addMessage(username, message);
  66.             val list: MutableList<ChatModel> = ArrayList()
  67.             list.add(data)
  68.             adapter!!.addItems(list)
  69.         })
  70.     }
  71.  
  72.  
  73.     override fun onCreate(savedInstanceState: Bundle?) {
  74.         super.onCreate(savedInstanceState)
  75.         setContentView(R.layout.activity_chat)
  76.  
  77.         inputMessage = findViewById(R.id.searchChatId)
  78.         recyclerView = findViewById(R.id.messageRec)
  79.         layoutManager = LinearLayoutManager(this)
  80.         recyclerView!!.layoutManager = layoutManager
  81.         recyclerView!!.setHasFixedSize(true)
  82.         recyclerView!!.setItemViewCacheSize(20)
  83.         recyclerView!!.isDrawingCacheEnabled = true
  84.         chatApiService = ApiUtils.getGeneralService(applicationContext)
  85.  
  86.  
  87.         userId = intent.getIntExtra("IdReciver", 0)
  88.  
  89.  
  90.         recyclerView!!.addOnScrollListener(object : RecyclerView.OnScrollListener() {
  91.             override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
  92.                 super.onScrolled(recyclerView, dx, dy)
  93.  
  94.                 visibleItemCount = layoutManager!!.childCount
  95.                 totalItemCount = layoutManager!!.itemCount
  96.                 pastVisibleItems = layoutManager!!.findFirstCompletelyVisibleItemPosition()
  97.  
  98.                 if(dy>0){ // did user scrolled?
  99.                     if(isLoading){
  100.                         if(totalItemCount>previousTotal) { //it has loaded
  101.                             isLoading = false
  102.                             previousTotal = totalItemCount
  103.                         }
  104.                     }
  105.                     if(!isLoading && (totalItemCount-visibleItemCount)<=(pastVisibleItems+viewTreshold)){
  106.                         pagination(chatId)
  107.                         isLoading = true
  108.                     }
  109.                 }
  110.             }
  111.         })
  112.  
  113.         //connect you socket client to the servertry {
  114.         getProfile(userId)
  115.  
  116.     }
  117.  
  118.     fun getProfile(user_id: Int) {
  119.         val url = "https://api.chillmeets.pl/v1/user/$user_id"
  120.         Login.compositeDisposable.add(chatApiService!!.IgetProfile(url)
  121.                 .subscribeOn(Schedulers.io())
  122.                 .observeOn(AndroidSchedulers.mainThread())
  123.                 .subscribeWith(object : CallbackWrapper<User>(baseContext) {
  124.                     override fun onNext(response: User) {
  125.                         chatId = response.chatRoomId
  126.                         Log.i("liczbaid", "post submitted to API.$chatId")
  127.                         Log.i("userRoomId", chatId.toString())
  128.                         GetFirstMessages(chatId)
  129.                     }}))
  130.     }
  131.  
  132.  
  133.  
  134.     fun SendBt(v: View) {
  135.         val messages = inputMessage!!.text.toString().trim { it <= ' ' }
  136.         if (!TextUtils.isEmpty(messages)) {
  137.             sendCallSocket(messages)
  138.         } else {
  139.             Log.e("blad", "cos jest puste")
  140.         }
  141.         inputMessage!!.setText("")
  142.     }
  143.  
  144.     fun turnOnSocket(roomId: Int){
  145.         try {
  146.             mSocket = IO.socket("https://chat.chillmeets.pl?token=${Login.tokenGlobal}")
  147.             Log.i("asdqw33334edd1", mSocket.toString())
  148.         } catch (e: URISyntaxException) {
  149.             Log.i("asdqw33334edd", e.toString())
  150.         }
  151.      
  152.         Log.i("userRoomId", roomId.toString())
  153.         mSocket!!.connect()
  154.         mSocket!!.emit("join", roomId)
  155.         mSocket!!.on("consume_message", onNewMessage)
  156.  
  157.  
  158.     }
  159.  
  160.     fun sendCallSocket(content: String) {
  161.         val rootObject= JSONObject()
  162.         rootObject.put("room", chatId)
  163.         rootObject.put("message",content)
  164.         Log.i("asdqw33334edd3", mSocket.toString())
  165.          mSocket!!.emit("emit_message", rootObject)
  166.     }
  167.  
  168.  
  169.     private fun GetFirstMessages(roomId: Int) {
  170.         Login.compositeDisposable.add(chatApiService!!.IGetAllMessages("https://chat2.chillmeets.pl/v1/chat/rooms/$roomId/messages?page=1")
  171.                 .subscribeOn(Schedulers.io())
  172.                 .observeOn(AndroidSchedulers.mainThread())
  173.                 .subscribeWith(object : CallbackWrapper<MutableList<ChatModel>>(baseContext) {
  174.                     override fun onNext(response: MutableList<ChatModel>) {
  175.                         adapter = RecyclerAdapterChat(response, this@Chat)
  176.                         recyclerView!!.adapter = adapter
  177.                         Log.i("userRoomId", roomId.toString())
  178.                         turnOnSocket(roomId)
  179.                         Log.i("asdqw33334edd2", "it's ok")
  180.                     }
  181.                 }
  182.                 ))
  183.     }
  184.  
  185.  
  186.     fun pagination(roomId: Int){
  187.         progressBar!!.visibility = View.VISIBLE
  188.         val url = "https://chat2.chillmeets.pl/v1/chat/rooms/$roomId/messages?page=$counter"
  189.         Login.compositeDisposable.add(chatApiService!!.IGetAllMessages(url)
  190.                 .subscribeOn(Schedulers.io())
  191.                 .observeOn(AndroidSchedulers.mainThread())
  192.                 .subscribeWith(object : CallbackWrapper<MutableList<ChatModel>>(baseContext) {
  193.                     override fun onNext(response: MutableList<ChatModel>) {
  194.                         counter++
  195.                         adapter!!.addItems(response)
  196.                         progressBar!!.visibility = View.GONE
  197.                     }}))
  198.     }
  199.  
  200.  
  201.     public override fun onDestroy() {
  202.         super.onDestroy()
  203.  
  204.         mSocket!!.disconnect()
  205.         mSocket!!.off("new message", onNewMessage)
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement