/** * Cancels the message delivery. * * @return This message. * @throws IllegalStateException If this method is called before {@link #send()}. */ public synchronized PlayerMessage cancel() { Assertions.checkState(isSent); isCanceled = true; markAsProcessed(/* isDelivered= */ false); return this; }
private void resolvePendingMessagePositions() { for (int i = pendingMessages.size() - 1; i >= 0; i--) { if (!resolvePendingMessagePosition(pendingMessages.get(i))) { // Unable to resolve a new position for the message. Remove it. pendingMessages.get(i).message.markAsProcessed(/* isDelivered= */ false); pendingMessages.remove(i); } } // Re-sort messages by playback order. Collections.sort(pendingMessages); }
@Override public synchronized void sendMessage(PlayerMessage message) { if (released) { Log.w(TAG, "Ignoring messages sent after release."); message.markAsProcessed(/* isDelivered= */ false); return; } handler.obtainMessage(MSG_SEND_MESSAGE, message).sendToTarget(); }
private void sendMessageInternal(PlayerMessage message) throws ExoPlaybackException { if (message.getPositionMs() == C.TIME_UNSET) { // If no delivery time is specified, trigger immediate message delivery. sendMessageToTarget(message); } else if (mediaSource == null || pendingPrepareCount > 0) { // Still waiting for initial timeline to resolve position. pendingMessages.add(new PendingMessageInfo(message)); } else { PendingMessageInfo pendingMessageInfo = new PendingMessageInfo(message); if (resolvePendingMessagePosition(pendingMessageInfo)) { pendingMessages.add(pendingMessageInfo); // Ensure new message is inserted according to playback order. Collections.sort(pendingMessages); } else { message.markAsProcessed(/* isDelivered= */ false); } } }
private void deliverMessage(PlayerMessage message) throws ExoPlaybackException { if (message.isCanceled()) { return; } try { message.getTarget().handleMessage(message.getType(), message.getPayload()); } finally { message.markAsProcessed(/* isDelivered= */ true); } }
@Override @SuppressWarnings("unchecked") public boolean handleMessage(Message msg) { PlayerMessage message = (PlayerMessage) msg.obj; try { message.getTarget().handleMessage(message.getType(), message.getPayload()); message.markAsProcessed(/* isDelivered= */ true); } catch (ExoPlaybackException e) { fail("Unexpected ExoPlaybackException."); } return true; } }
@Override @SuppressWarnings("unchecked") public boolean handleMessage(Message msg) { PlayerMessage message = (PlayerMessage) msg.obj; try { message.getTarget().handleMessage(message.getType(), message.getPayload()); message.markAsProcessed(/* isDelivered= */ true); } catch (ExoPlaybackException e) { fail("Unexpected ExoPlaybackException."); } return true; } }
queue.setTimeline(Timeline.EMPTY); for (PendingMessageInfo pendingMessageInfo : pendingMessages) { pendingMessageInfo.message.markAsProcessed(/* isDelivered= */ false);