Advertisement
Guest User

ChatFragment

a guest
Jul 1st, 2021
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 5.69 KB | None | 0 0
  1. @AndroidEntryPoint
  2. class ChatFragment : Fragment(), InputListener {
  3.  
  4.     private var _binding: FragmentChatBinding? = null
  5.     private val binding get() = _binding!!
  6.  
  7.     private val args by navArgs<ChatFragmentArgs>()
  8.  
  9.     private val viewModel: ChatViewModel by viewModels()
  10.  
  11.     private lateinit var messageListAdapter: MessagesListAdapter<KitMessage>
  12.  
  13.     private var ecosystemRepository: EcosystemRepository? = null
  14.  
  15.     override fun onCreateView(
  16.         inflater: LayoutInflater,
  17.         container: ViewGroup?,
  18.         savedInstanceState: Bundle?
  19.     ): View {
  20.         _binding = FragmentChatBinding.inflate(inflater, container, false)
  21.         return binding.root
  22.     }
  23.  
  24.     override fun onStart() {
  25.         super.onStart()
  26.         if (ecosystemRepository?.getSubscriptionPurchased() == true)
  27.             binding.buttonPremium.hide()
  28.     }
  29.  
  30.     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  31.         super.onViewCreated(view, savedInstanceState)
  32.         initViews()
  33.         subscribeToObservers()
  34.         initEcoSystem()
  35.     }
  36.  
  37.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  38.         return when (item.itemId) {
  39.             R.id.menu_settings -> {
  40.                 findNavController().navigate(R.id.settingsFragment)
  41.                 true
  42.             }
  43.             else -> super.onOptionsItemSelected(item)
  44.         }
  45.     }
  46.  
  47.     private fun initToolbar() {
  48.         binding.toolbarChat.apply {
  49.             inflateMenu(R.menu.menu_main)
  50.             setOnMenuItemClickListener {
  51.                 onOptionsItemSelected(it)
  52.             }
  53.             setNavigationOnClickListener {
  54.                 binding.root.hideKeyboard()
  55.                 findNavController().popBackStack()
  56.             }
  57.         }
  58.     }
  59.  
  60.     private fun initViews() {
  61.         initToolbar()
  62.         initGirl()
  63.         initMessageListAdapter()
  64.         initMessageInput()
  65.         initHistoryMessages()
  66.         initPremium()
  67.     }
  68.  
  69.     private fun initPremium() {
  70.         binding.apply {
  71.             buttonPremium.setOnClickListener {
  72.                 ecosystemRepository?.setOfferPlace(VALUE_PREMIUM)
  73.                 logEvent(EVENT_CLICK_ON_PREMIUM_BUTTON)
  74.             }
  75.         }
  76.     }
  77.  
  78.     private fun initGirl() {
  79.         val girl = args.currentDialog.users[KIT_GIRL_INDEX]
  80.         binding.apply {
  81.             girlName.text = girl.name
  82.             avatar.loadResizedImage(girl.avatar)
  83.         }
  84.     }
  85.  
  86.     private fun initHistoryMessages() {
  87.         val dialogId = args.currentDialog.id
  88.         val historyMessages = viewModel.getDialogListOfMessagesById(dialogId)
  89.         messageListAdapter.addToEnd(historyMessages, false)
  90.     }
  91.  
  92.     private fun initMessageListAdapter() {
  93.  
  94.         val holdersConfig = MessageHolders()
  95.             .setIncomingTextConfig(
  96.                 CustomIncomingTextMessageViewHolder::class.java,
  97.                 R.layout.item_custom_incoming_text_message
  98.             )
  99.             .setOutcomingTextConfig(
  100.                 CustomOutcomingTextMessageViewHolder::class.java,
  101.                 R.layout.item_custom_outcoming_text_message
  102.             )
  103.         messageListAdapter = MessagesListAdapter<KitMessage>(USER_ID, holdersConfig, null)
  104.         binding.messagesList.setAdapter(messageListAdapter)
  105.  
  106.     }
  107.  
  108.  
  109.     private fun subscribeToObservers() {
  110.         val girl = args.currentDialog.users[KIT_GIRL_INDEX]
  111.  
  112.         /*viewModel.girlBotReply.observe(viewLifecycleOwner, { message ->
  113.             message ?: binding.input.showSnackbar(getString(R.string.internet_problem), 2000)
  114.  
  115.             if (message != null) {
  116.                 val kitGirlMessage = KitMessage(
  117.                     id = girl.id,
  118.                     kitUser = girl,
  119.                     text = message
  120.                 )
  121.                 messageListAdapter.addToStart(kitGirlMessage, true)
  122.  
  123.                 viewModel.saveDialogListOfMessagesById(args.currentDialog.id, kitGirlMessage)
  124.             }
  125.         })*/
  126.         viewModel.uploadGirlBotReply.observe(viewLifecycleOwner, { message->
  127.             message ?: binding.input.showSnackbar(getString(R.string.internet_problem), 2000)
  128.             Timber.e("message $message")
  129.             if (message != null) {
  130.                 val kitGirlMessage = KitMessage(
  131.                     id = girl.id,
  132.                     kitUser = girl,
  133.                     text = message
  134.                 )
  135.                 messageListAdapter.addToStart(kitGirlMessage, true)
  136.  
  137.                 viewModel.saveDialogListOfMessagesById(args.currentDialog.id, kitGirlMessage)
  138.             }
  139.         })
  140.         viewModel.dialogMessages.observe(viewLifecycleOwner, {
  141.                 viewModel.saveDialogListOfMessagesById(args.currentDialog.id, it)
  142.         })
  143.     }
  144.  
  145.     private fun initMessageInput() {
  146.         binding.input.setInputListener(this)
  147.     }
  148.  
  149.     private fun initEcoSystem() {
  150.         ecosystemRepository =
  151.             EcosystemDependencyFactory.provideEcosystemRepository(requireActivity().applicationContext)
  152.     }
  153.  
  154.     override fun onSubmit(input: CharSequence): Boolean {
  155.         val currentKitMessage = args.currentDialog.lastMessage
  156.         val user = args.currentDialog.users[KIT_USER_INDEX]
  157.         val girl = args.currentDialog.users[KIT_GIRL_INDEX]
  158.  
  159.         val newKitMessage = KitMessage(
  160.             id = currentKitMessage.id,
  161.             kitUser = user,
  162.             text = input.toString()
  163.         )
  164.  
  165.         messageListAdapter.addToStart(
  166.             newKitMessage, true
  167.         )
  168.         viewModel.getGirlfriendBotReply(girl.id, newKitMessage)
  169.         viewModel.setDialogMessages(newKitMessage)
  170.         return true
  171.     }
  172.  
  173.     override fun onDestroy() {
  174.         super.onDestroy()
  175.        _binding = null
  176.     }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement