Advertisement
andyshon

ChatSingleActivity

Jul 2nd, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 9.58 KB | None | 0 0
  1. package com.meetandright.ui.homescreen.fragments.chats.chatSingle
  2.  
  3. import android.app.AlertDialog
  4. import android.content.*
  5. import android.os.Bundle
  6. import android.os.Handler
  7. import android.os.IBinder
  8. import android.view.inputmethod.EditorInfo
  9. import android.widget.TextView
  10. import androidx.localbroadcastmanager.content.LocalBroadcastManager
  11. import androidx.recyclerview.widget.LinearLayoutManager
  12. import com.meetandright.R
  13. import com.meetandright.data.entity.Message
  14. import com.meetandright.data.preference.Preference
  15. import com.meetandright.data.preference.PreferenceManager
  16. import com.meetandright.events.RxEventBus
  17. import com.meetandright.ui.base.BaseContract
  18. import com.meetandright.ui.base.inject.BaseInjectActivity
  19. import com.meetandright.ui.homescreen.fragments.chats.chatSingle.entity.MessageObject
  20. import com.meetandright.ui.homescreen.fragments.discover.viewProfile.ViewProfileActivity
  21. import com.meetandright.ui.profile.UserProfileMetadata
  22. import com.meetandright.utils.extensions.*
  23. import com.meetandright.utils.rx.RxViewsClick
  24. import io.reactivex.rxkotlin.addTo
  25. import kotlinx.android.synthetic.main.activity_chat_single.*
  26. import kotlinx.android.synthetic.main.app_toolbar_chat_single.*
  27. import timber.log.Timber
  28. import javax.inject.Inject
  29.  
  30. class ChatSingleActivity : BaseInjectActivity(), ChatSingleContract.View, ServiceConnection {
  31.  
  32.     @Inject lateinit var presenter: ChatSinglePresenter
  33.     override fun getPresenter(): BaseContract.Presenter<*>? = presenter
  34.     @Inject lateinit var rxEventBus: RxEventBus
  35.  
  36.     private var socketService: SocketService? = null
  37.  
  38.     private var adapter: ChatSingleAdapter? = null
  39.  
  40.     private var chatId = ""
  41.     private var userId = ""
  42.     private var userPhotos = arrayListOf<String>()
  43.     private var firstName = ""
  44.     private var dateOfBirth = ""
  45.     private var metroArea = ""
  46.     private var education = ""
  47.     private var profession = ""
  48.     private var description = ""
  49.  
  50.     override fun onCreate(savedInstanceState: Bundle?) {
  51.         presentationComponent.inject(this)
  52.         presenter.attachToView(this)
  53.         super.onCreate(savedInstanceState)
  54.         setContentView(R.layout.activity_chat_single)
  55.  
  56.         chatId = intent.getStringExtra("chatId") ?: ""
  57.         userId = intent.getStringExtra("userId") ?: ""
  58.         userPhotos = intent.getStringArrayListExtra("userPhotos") ?: arrayListOf()
  59.         firstName = intent.getStringExtra("firstName") ?: ""
  60.         dateOfBirth = intent.getStringExtra("dateOfBirth") ?: ""
  61.         metroArea = intent.getStringExtra("metroArea") ?: ""
  62.         education = intent.getStringExtra("education") ?: ""
  63.         profession = intent.getStringExtra("profession") ?: ""
  64.         description = intent.getStringExtra("description") ?: ""
  65.  
  66.         Timber.e("firstName = $firstName")
  67.         if (firstName.isEmpty()) {
  68.             presenter.getChat(chatId)
  69.         }
  70.  
  71.         initListeners()
  72.         setupToolbar()
  73.         setupList()
  74.     }
  75.  
  76.     private fun initListeners() {
  77.         btnSendMessage.setOnClickListener {
  78.             if (etWriteMessage.text.toString().trim().isNotEmpty()) {
  79.                 if (checkInternetConnection()) {
  80.                     Timber.e("Send message, userId = $userId, ${UserProfileMetadata.user?.id}, socketService = $socketService")
  81.                     socketService?.sendMessage(UserProfileMetadata.user?.id ?: "", etWriteMessage.text.toString().trim(), chatId)
  82.                     etWriteMessage.setText("")
  83.                 }
  84.             }
  85.         }
  86.         etWriteMessage.setOnEditorActionListener(TextView.OnEditorActionListener { view, keyCode, event ->
  87.             if (keyCode == EditorInfo.IME_ACTION_DONE) {
  88.                 btnSendMessage.performClick()
  89.                 return@OnEditorActionListener true
  90.             }
  91.             false
  92.         })
  93.         etWriteMessage.setOnClickListener {
  94.             Handler().postDelayed({
  95.                 chatList?.scrollToPosition(presenter.chat2.size-1)
  96.             }, 200)
  97.         }
  98.         etWriteMessage.setOnFocusChangeListener { view, b ->
  99.             if (b) {
  100.                 Handler().postDelayed({
  101.                     chatList?.scrollToPosition(presenter.chat2.size-1)
  102.                 }, 200)
  103.             }
  104.         }
  105.         RxViewsClick.create(ivOpponentAvatar, layoutToolbarOpponent)
  106.             .subscribe({
  107.                 viewProfile()
  108.             }, {
  109.                 Timber.e("Error = ${it.message}")
  110.             })
  111.             .addTo(getDestroyDisposable())
  112.     }
  113.  
  114.     private fun setupToolbar() {
  115.         btnChatSingleBack.setOnClickListener { finish() }
  116.         btnMenuSettings.setOnClickListener { openMenu() }
  117.         if (firstName.isNotEmpty()) {
  118.             tvNameAndAge.text = firstName.plus(", ").plus(getAge(dateOfBirth))
  119.             tvMetroArea.text = metroArea
  120.             ivOpponentAvatar.load(this, getImageLinkMedium(userPhotos.first()), callback = { ivOpponentAvatar.show() }, failed = { })
  121.         }
  122.     }
  123.  
  124.     private fun openMenu() {
  125.         val actions = resources.getStringArray(R.array.chat_single_menu)
  126.         val dialog = AlertDialog.Builder(this)
  127.             .setItems(actions) { dialogInterface, selectedIndex ->
  128.                 when (selectedIndex) {
  129.                     0 -> reportUser()
  130.                     1 -> unmatch()
  131.                     2 -> viewProfile()
  132.                 }
  133.                 dialogInterface.dismiss()
  134.             }
  135.             .create()
  136.         dialog.show()
  137.     }
  138.  
  139.     private fun reportUser() {
  140.         if (checkInternetConnection()) {
  141.             showReportDialog(getActivityContext()) { reportMsg ->
  142.                 presenter.report(userId, reportMsg)
  143.             }
  144.         }
  145.     }
  146.  
  147.     private fun unmatch() {
  148.         if (checkInternetConnection()) {
  149.             showUnmatchDialog(getActivityContext()) {
  150.                 presenter.unmatchUser(userId)
  151.             }
  152.         }
  153.     }
  154.  
  155.     private fun viewProfile() {
  156.         ViewProfileActivity.startActivity(this, userPhotos, firstName, dateOfBirth, metroArea, education, profession, description)
  157.     }
  158.  
  159.     private fun setupList() {
  160.         chatList?.let { it.layoutManager = LinearLayoutManager(getActivityContext()) }
  161.         val photo = if (userPhotos.isNotEmpty()) userPhotos.first() else ""
  162.         adapter = ChatSingleAdapter(presenter.chat2, photo)
  163.         chatList.adapter = adapter
  164.         adapter?.notifyDataSetChanged()
  165.     }
  166.  
  167.     override fun onChatLoaded() {
  168.         firstName = presenter.user?.firstName ?: ""
  169.         dateOfBirth = presenter.user?.dateOfBirth ?: ""
  170.         metroArea = presenter.user?.metroArea ?: ""
  171.         userPhotos = presenter.user?.photos ?: arrayListOf()
  172.         setupToolbar()
  173.         adapter?.notifyDataSetChanged()
  174.         chatList.post {
  175.             chatList.scrollToPosition(presenter.chat2.size-1)
  176.         }
  177.         Timber.e("onChatLoaded, socketService = $socketService")
  178.         socketService?.enterChat(chatId)
  179.     }
  180.  
  181.     override fun onReport() {
  182.         finish()
  183.     }
  184.  
  185.     override fun onUnmatch() {
  186.         finish()
  187.     }
  188.  
  189.     private var m_serviceBound = false
  190.  
  191.     override fun onDestroy() {
  192.         Timber.e("onDestroy, socketService = $socketService")
  193.         super.onDestroy()
  194.     }
  195.  
  196.     @Inject lateinit var prefs: PreferenceManager
  197.  
  198.     override fun onResume() {
  199.         super.onResume()
  200.  
  201. //        SocketService.prefs = prefs
  202. //        val intent1 = Intent(this@ChatSingleActivity, SocketService::class.java)
  203. //        intent1.putExtra("token", prefs.getObject(Preference.KEY_MR_ACCESS_TOKEN, String::class.java))
  204. //        startService(intent1)
  205.  
  206.         LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, IntentFilter("ChatSocket"))
  207.         applicationContext.bindService(Intent(this, SocketService::class.java), this, 0)
  208.         m_serviceBound = true
  209.         Timber.e("onResume, socketService = $socketService")
  210.  
  211.         presenter.getChat(chatId)
  212.     }
  213.  
  214.     override fun onPause() {
  215.         socketService?.leaveChat(chatId)
  216.         super.onPause()
  217.         LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver)
  218.         Timber.e("onPause, m_serviceBound = $m_serviceBound, socketService = $socketService")
  219.         if (m_serviceBound) {
  220.             applicationContext.unbindService(this);
  221.             m_serviceBound = false;
  222.         }
  223.     }
  224.  
  225.     private val mMessageReceiver = object : BroadcastReceiver() {
  226.         override fun onReceive(context: Context?, intent: Intent?) {
  227.  
  228.             if (intent?.hasExtra("newMessage") == true) {
  229.                 val newMessage = intent.getStringExtra("newMessage")
  230.                 val messageId = intent.getStringExtra("messageId")
  231.                 val createdAt = intent.getStringExtra("createdAt")
  232.                 val authorId = intent.getStringExtra("authorId")
  233.                 Timber.e("newMessage = $newMessage, createdAt = $createdAt, text = $newMessage, messageId = $messageId")
  234.  
  235.                 presenter.chat2.add(MessageObject("MESSAGE", Message(messageId, newMessage, authorId, createdAt)))
  236.                 adapter?.notifyItemInserted(presenter.chat2.size-1)
  237.                 chatList.scrollToPosition(presenter.chat2.size-1)
  238.             }
  239.         }
  240.     }
  241.  
  242.     override fun onServiceConnected(p0: ComponentName?, binder: IBinder?) {
  243.         socketService = (binder as SocketService.MyBinder).service
  244.         Timber.e("onServiceConnected, socketService = $socketService, chatId = $chatId")
  245.         socketService?.enterChat(chatId)
  246.     }
  247.  
  248.     override fun onServiceDisconnected(p0: ComponentName?) {
  249.         socketService = null
  250.         Timber.e("onServiceDisconnected, socketService = $socketService")
  251.     }
  252.  
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement