public static ReadStatus hide () { return new ReadStatus(Hide); }
protected void updateReadStatus () { if (message != null) { int resource = R.drawable.ic_message_received; ReadStatus status = message.getReadStatus(); // Hide the read receipt for public threads if(message.getThread().typeIs(ThreadType.Public) || ChatSDK.readReceipts() == null) { status = ReadStatus.hide(); } if(status.is(ReadStatus.delivered())) { resource = R.drawable.ic_message_delivered; } if(status.is(ReadStatus.read())) { resource = R.drawable.ic_message_read; } if(readReceiptImageView != null) { readReceiptImageView.setImageResource(resource); readReceiptImageView.setVisibility(status.is(ReadStatus.hide()) ? View.INVISIBLE : View.VISIBLE); } } }
public void handleLocalNotifications () { if (localNotificationDisposable != null) { localNotificationDisposable.dispose(); } // TODO: Check this localNotificationDisposable = ChatSDK.events().sourceOnMain() .filter(NetworkEvent.filterType(EventType.MessageAdded)) .subscribe(networkEvent -> { Message message = networkEvent.message; Thread thread = networkEvent.thread; if(message != null && !AppBackgroundMonitor.shared().inBackground()) { if (thread.typeIs(ThreadType.Private) || (thread.typeIs(ThreadType.Public) && ChatSDK.config().pushNotificationsForPublicChatRoomsEnabled)) { if(!message.getSender().isMe() && ChatSDK.ui().showLocalNotifications(message.getThread())) { ReadStatus status = message.readStatusForUser(ChatSDK.currentUser()); if (!message.isRead() && !status.is(ReadStatus.delivered())) { // Only show the alert if we'recyclerView not on the private threads tab ChatSDK.ui().notificationDisplayHandler().createMessageNotification(message); } } } } }); }
private HashMap<String, HashMap<String, Integer>> initialReadReceipts () { HashMap<String, HashMap<String, Integer>> map = new HashMap<>(); for(User u : getModel().getThread().getUsers()) { if(!u.isMe()) { HashMap<String, Integer> status = new HashMap<>(); status.put(Keys.Status, ReadStatus.none().getValue()); map.put(u.getEntityID(), status); } } return map; }
public ReadStatus readStatusForUser (String userEntityID) { for(ReadReceiptUserLink link : getReadReceiptLinks()) { if(link.getUser() != null && link.getUser().getEntityID().equals(userEntityID)) { return new ReadStatus(link.getStatus()); } } return ReadStatus.notSet(); }
public static ReadStatus notSet () { return new ReadStatus(NotSet); }
public void setUserReadStatus (User user, ReadStatus status, DateTime date) { ReadReceiptUserLink link = linkForUser(user); if(link == null) { link = StorageManager.shared().createEntity(ReadReceiptUserLink.class); link.setMessageId(this.getId()); getReadReceiptLinks().add(link); } link.setUser(user); link.setStatus(status.getValue()); link.setDate(date); link.update(); update(); }
public static ReadStatus none () { return new ReadStatus(None); }
public static ReadStatus delivered () { return new ReadStatus(Delivered); }
public static ReadStatus read () { return new ReadStatus(Read); }
public void updateReadReceipts (HashMap<String, Object> map) { for(String key : map.keySet()) { User user = StorageManager.shared().fetchOrCreateEntityWithEntityID(User.class, key); Object innerMap = map.get(key); if(innerMap != null && innerMap instanceof HashMap) { Map<String, Object> statusMap = (Map) innerMap; long status = ReadStatus.None; long date = 0; if(statusMap.get(Keys.Status) instanceof Long) { status = (Long) statusMap.get(Keys.Status); } if(statusMap.get(Keys.Date) instanceof Long) { date = (Long) statusMap.get(Keys.Date); } model.setUserReadStatus(user, new ReadStatus((int) status), new DateTime(date)); } } }
public ReadStatus getReadStatus () { int total = 0; int userCount = getReadReceiptLinks().size(); for(ReadReceiptUserLink link : getReadReceiptLinks()) { total += link.getStatus(); } int status = ReadStatus.None; if(total >= ReadStatus.Delivered * userCount) { status = ReadStatus.Delivered; } if(total >= ReadStatus.Read * userCount) { status = ReadStatus.Read; } if (total == 0) { status = ReadStatus.None; } return new ReadStatus(status); }