Advertisement
hasancse1991

Untitled

Apr 25th, 2019
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.58 KB | None | 0 0
  1. package com.bs.pulse.chat;
  2.  
  3. import android.content.Context;
  4. import android.util.Log;
  5.  
  6. import com.bs.pulse.utils.CustomLogger;
  7. import com.bs.pulse.utils.DateUtil;
  8. import com.bs.pulse.videoCall.MessageAdapter;
  9. import com.bs.pulse.videoCall.model.MessageBody;
  10. import com.bs.pulse.videoCall.model.PulseMessage;
  11. import com.google.gson.Gson;
  12. import com.twilio.chat.CallbackListener;
  13. import com.twilio.chat.Channel;
  14. import com.twilio.chat.ChannelListener;
  15. import com.twilio.chat.ChatClient;
  16. import com.twilio.chat.ErrorInfo;
  17. import com.twilio.chat.Member;
  18. import com.twilio.chat.Message;
  19. import com.twilio.chat.StatusListener;
  20.  
  21. import static com.bs.pulse.videoCall.MessageAdapter.DIRECTION_INCOMING;
  22. import static com.bs.pulse.videoCall.MessageAdapter.DIRECTION_OUTGOING;
  23.  
  24. public class TwilioChatImplementation implements ChatContract {
  25.  
  26.     private String TAG = "twilio-chat";
  27.     private ChatClient mChatClient;
  28.  
  29.     private Context context;
  30.     private String myUserId;
  31.     private Channel mGeneralChannel;
  32.     private String DEFAULT_CHANNEL_NAME = "n/a";
  33.     private ChatCallback chatCallback;
  34.  
  35.     private boolean isSend = false;
  36.  
  37.     @Override
  38.     public void initialize(Context context, String myUserId, String channelName, String accessToken, ChatCallback chatCallback) {
  39.         this.context = context;
  40.         this.myUserId = myUserId;
  41.         DEFAULT_CHANNEL_NAME = channelName;
  42.         this.chatCallback = chatCallback;
  43.  
  44.  
  45.         ChatClient.Properties.Builder builder = new ChatClient.Properties.Builder();
  46.         ChatClient.Properties props = builder.createProperties();
  47.         ChatClient.create(context, accessToken, props, mChatClientCallback);
  48.     }
  49.  
  50.     @Override
  51.     public void sendMessage(MessageBody messageBody) {
  52.  
  53.         isSend = true;
  54.  
  55.         if (mGeneralChannel != null) {
  56.  
  57.             Message.Options options = Message.options().withBody(new Gson().toJson(messageBody, MessageBody.class));
  58.  
  59.             mGeneralChannel.getMessages().sendMessage(options, new CallbackListener<Message>() {
  60.                 @Override
  61.                 public void onSuccess(Message message) {
  62.                     Log.d("tag", "send message " + message.getMessageBody());
  63.                 }
  64.             });
  65.         } else
  66.             CustomLogger.ErrorLog("Channel is null");
  67.  
  68.     }
  69.  
  70.     private CallbackListener<ChatClient> mChatClientCallback = new CallbackListener<ChatClient>() {
  71.  
  72.         @Override
  73.         public void onSuccess(ChatClient chatClient) {
  74.             mChatClient = chatClient;
  75.             loadChannels();
  76.             Log.d(TAG, "Success creating Twilio Chat Client");
  77.         }
  78.  
  79.         @Override
  80.         public void onError(ErrorInfo errorInfo) {
  81.             Log.e(TAG, "Error creating Twilio Chat Client: " + errorInfo.getMessage());
  82.         }
  83.     };
  84.  
  85.     private void loadChannels() {
  86.         mChatClient.getChannels().getChannel(DEFAULT_CHANNEL_NAME, new CallbackListener<Channel>() {
  87.             @Override
  88.             public void onSuccess(Channel channel) {
  89.  
  90.                 if (channel != null) {
  91.                     joinChannel(channel);
  92.                 } else {
  93.  
  94.                     mChatClient.getChannels().channelBuilder()
  95.                             .withUniqueName(DEFAULT_CHANNEL_NAME)
  96.                             .withFriendlyName(DEFAULT_CHANNEL_NAME)
  97.                             .withType(Channel.ChannelType.PUBLIC)
  98.                             .build(new CallbackListener<Channel>() {
  99.                                 @Override
  100.                                 public void onSuccess(Channel channel) {
  101.                                     joinChannel(channel);
  102.                                 }
  103.                             });
  104.                 }
  105.             }
  106.  
  107.             @Override
  108.             public void onError(ErrorInfo errorInfo) {
  109.                 Log.e(TAG, "Error retrieving channel: " + errorInfo.getMessage());
  110.  
  111.                 mChatClient.getChannels().channelBuilder()
  112.                         .withUniqueName(DEFAULT_CHANNEL_NAME)
  113.                         .withFriendlyName(DEFAULT_CHANNEL_NAME)
  114.                         .withType(Channel.ChannelType.PUBLIC)
  115.                         .build(new CallbackListener<Channel>() {
  116.                             @Override
  117.                             public void onSuccess(Channel channel) {
  118.                                 joinChannel(channel);
  119.                             }
  120.                         });
  121.             }
  122.  
  123.         });
  124.  
  125.     }
  126.  
  127.     private void joinChannel(final Channel channel) {
  128.  
  129.         channel.leave(new StatusListener() {
  130.             @Override
  131.             public void onSuccess() {
  132.  
  133.                 channel.join(new StatusListener() {
  134.                     @Override
  135.                     public void onSuccess() {
  136.                         Log.d(TAG, "Joined channel: " + channel.getUniqueName());
  137.  
  138.                         mGeneralChannel = channel;
  139.  
  140.                         mGeneralChannel.addListener(mDefaultChannelListener);
  141.                         chatCallback.onChatJoinSuccess();
  142.                     }
  143.  
  144.                     @Override
  145.                     public void onError(ErrorInfo errorInfo) {
  146.                         Log.e(TAG, "Error joining channel: " + errorInfo.getMessage());
  147.                         chatCallback.onChatJoinFailed(errorInfo.getMessage());
  148.                     }
  149.                 });
  150.             }
  151.  
  152.             @Override
  153.             public void onError(ErrorInfo errorInfo) {
  154.                 super.onError(errorInfo);
  155.                 Log.e(TAG, "Joining error: " + errorInfo.getMessage());
  156.  
  157.                 channel.join(new StatusListener() {
  158.                     @Override
  159.                     public void onSuccess() {
  160.                         Log.d(TAG, "Joined channel: " + channel.getUniqueName());
  161.  
  162.                         mGeneralChannel = channel;
  163.  
  164.                         mGeneralChannel.addListener(mDefaultChannelListener);
  165.                         chatCallback.onChatJoinSuccess();
  166.                     }
  167.  
  168.                     @Override
  169.                     public void onError(ErrorInfo errorInfo) {
  170.                         Log.e(TAG, "Error joining channel: " + errorInfo.getMessage());
  171.                         chatCallback.onChatJoinFailed(errorInfo.getMessage());
  172.                     }
  173.                 });
  174.             }
  175.         });
  176.  
  177.     }
  178.  
  179.  
  180.     private ChannelListener mDefaultChannelListener = new ChannelListener() {
  181.  
  182.         @Override
  183.         public void onMessageAdded(final Message message) {
  184.             CustomLogger.Log("Message added: " + message.getMessageBody() + " is send " + isSend);
  185.  
  186.             String messageBody = message.getMessageBody();
  187.             MessageBody messageBodyModel = new Gson().fromJson(messageBody, MessageBody.class);
  188.  
  189.             if (messageBodyModel.getKeyType().equalsIgnoreCase("video") && messageBodyModel.getKeyBodyText().equalsIgnoreCase("callReject")) {
  190.                 chatCallback.onOutgoingCallRejectedByOtherSideUser();
  191.             } else {
  192.  
  193.                 if (messageBodyModel.getKeyType().equalsIgnoreCase("chat")) {
  194.  
  195.                     PulseMessage pulseMessage =
  196.                             new PulseMessage(messageBodyModel.getKeyMessageSenderName(),
  197.                                     messageBodyModel.getKeyBodyText(),
  198.                                     DateUtil.dateToStringWithTimeZoneGMT(message.getDateCreatedAsDate(), DateUtil.FORMAT_PULSE),
  199.                                     messageBodyModel.getKeyMessageSenderId().equalsIgnoreCase(myUserId) ? DIRECTION_INCOMING : DIRECTION_OUTGOING);
  200.  
  201.                     if (isSend) {
  202.                         isSend = false;
  203.                         chatCallback.onMessageSent(pulseMessage);
  204.                     } else {
  205.                         chatCallback.onMessageReceived(pulseMessage);
  206.                     }
  207.                 } else if (messageBodyModel.getKeyType().equalsIgnoreCase("camera")) {
  208.  
  209.                     CustomLogger.Log("camera type");
  210.  
  211.                     if (!isSend) {
  212.  
  213.                         CustomLogger.Log("Camera incoming");
  214.  
  215.                         if (messageBodyModel.getKeyBodyText().equalsIgnoreCase("on"))
  216.                             chatCallback.onRemoteCameraStatusChanged(true);
  217.                         else
  218.                             chatCallback.onRemoteCameraStatusChanged(false);
  219.                     }
  220.  
  221.                 }
  222.             }
  223.  
  224.         }
  225.  
  226.         @Override
  227.         public void onMessageUpdated(Message message, Message.UpdateReason updateReason) {
  228.             Log.d(TAG, "Message updated: " + message.getMessageBody());
  229.         }
  230.  
  231.         @Override
  232.         public void onMessageDeleted(Message message) {
  233.             Log.d(TAG, "Message deleted");
  234.         }
  235.  
  236.         @Override
  237.         public void onMemberAdded(Member member) {
  238.             Log.d(TAG, "Member added: " + member.getIdentity());
  239.         }
  240.  
  241.         @Override
  242.         public void onMemberUpdated(Member member, Member.UpdateReason updateReason) {
  243.             Log.d(TAG, "Member updated: " + member.getIdentity());
  244.         }
  245.  
  246.         @Override
  247.         public void onMemberDeleted(Member member) {
  248.             Log.d(TAG, "Member deleted: " + member.getIdentity());
  249.         }
  250.  
  251.         @Override
  252.         public void onTypingStarted(Channel channel, Member member) {
  253.             Log.d(TAG, "Started Typing: " + member.getIdentity());
  254.         }
  255.  
  256.         @Override
  257.         public void onTypingEnded(Channel channel, Member member) {
  258.             Log.d(TAG, "Ended Typing: " + member.getIdentity());
  259.         }
  260.  
  261.         @Override
  262.         public void onSynchronizationChanged(Channel channel) {
  263.  
  264.         }
  265.     };
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement