Skip to content

Commit

Permalink
Merge pull request #113 from GetStream/fix/offline-message-send2
Browse files Browse the repository at this point in the history
Fix/offline message send2
  • Loading branch information
tschellenbach authored Oct 8, 2019
2 parents f728e7c + f3703c7 commit 7966341
Show file tree
Hide file tree
Showing 13 changed files with 63 additions and 108 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ public boolean equals(@Nullable Object obj) {
}
MessageListItem other = (MessageListItem) obj;


if (other.type != type) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ public class MessageViewHolderFactory {
public static final int MESSAGEITEM_MESSAGE = 2;
public static final int MESSAGEITEM_TYPING = 3;
public static final int MESSAGEITEM_THREAD_SEPARATOR = 4;
public static final int MESSAGEITEM_NO_CONNECTION = 5;
public static final int MESSAGEITEM_NOT_FOUND = 5;

public static final int GENERIC_ATTACHMENT = 1;
Expand All @@ -42,8 +41,6 @@ public int getEntityViewType(MessageListItem messageListItem, Boolean mine, List
return MESSAGEITEM_TYPING;
} else if (messageListItemType == MESSAGEITEM_THREAD_SEPARATOR) {
return MESSAGEITEM_THREAD_SEPARATOR;
}else if (messageListItemType == MESSAGEITEM_NO_CONNECTION) {
return MESSAGEITEM_NO_CONNECTION;
}
return MESSAGEITEM_NOT_FOUND;
}
Expand Down Expand Up @@ -95,10 +92,6 @@ public BaseMessageListItemViewHolder createMessageViewHolder(MessageListItemAdap
ThreadSeparatorViewHolder holder = new ThreadSeparatorViewHolder(R.layout.stream_item_thread_separator, parent);
holder.setStyle(adapter.getStyle());
return holder;
}else if (viewType == MESSAGEITEM_NO_CONNECTION) {
NoConnectionViewHolder holder = new NoConnectionViewHolder(R.layout.stream_item_no_connection, parent);
holder.setStyle(adapter.getStyle());
return holder;
} else {
return null;
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,11 @@ public boolean equals(@Nullable Object obj) {
if (!TextUtils.equals(this.getId(), otherMessage.getId())) {
return false;
}

if (!Objects.equals(updatedAt, otherMessage.updatedAt)) {
return false;
}

if (!Objects.equals(deletedAt, otherMessage.deletedAt)) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,9 +198,7 @@ public Client(String apiKey, ApiClientOptions options, ConnectionLiveData connec
connectionLiveData.observeForever(connectionModel -> {
if (connectionModel.getIsConnected() && !connected) {
Log.i(TAG, "fast track connection discovery: UP");
if (WSConn != null) {
reconnectWebSocket();
}
reconnectWebSocket();
} else if (!connectionModel.getIsConnected() && connected) {
Log.i(TAG, "fast track connection discovery: DOWN");
disconnectWebSocket();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ public class Sync {
public static final int LOCAL_ONLY = 0;
public static final int LOCAL_UPDATE_PENDING = 1;
public static final int SYNCED = 2;
public static final int LOCAL_FAILED = 3;

public Sync(@Status int status) {
System.out.println("status :" + status);
}

@IntDef({LOCAL_ONLY, LOCAL_UPDATE_PENDING, SYNCED})
@IntDef({LOCAL_ONLY, LOCAL_UPDATE_PENDING, SYNCED, LOCAL_FAILED})
@Retention(RetentionPolicy.SOURCE)
public @interface Status {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;

import com.getstream.sdk.chat.StreamChat;
import com.getstream.sdk.chat.adapter.MessageListItem;
import com.getstream.sdk.chat.adapter.MessageViewHolderFactory;
import com.getstream.sdk.chat.rest.Message;
Expand All @@ -24,7 +23,6 @@
import java.util.Map;

import static com.getstream.sdk.chat.adapter.MessageViewHolderFactory.MESSAGEITEM_MESSAGE;
import static com.getstream.sdk.chat.adapter.MessageViewHolderFactory.MESSAGEITEM_NO_CONNECTION;
import static com.getstream.sdk.chat.adapter.MessageViewHolderFactory.MESSAGEITEM_THREAD_SEPARATOR;


Expand Down Expand Up @@ -235,10 +233,6 @@ public void progressMessages(List<Message> messages) {
entities.add(new MessageListItem(MESSAGEITEM_THREAD_SEPARATOR));
previousMessage = null;
}
// Insert No connection Separator
if (i == topIndex && !StreamChat.getInstance(null).isConnected())
entities.add(new MessageListItem(MESSAGEITEM_NO_CONNECTION));

}
this.messageEntities.clear();
this.messageEntities.addAll(entities);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner;

import com.getstream.sdk.chat.StreamChat;
import com.getstream.sdk.chat.databinding.StreamViewChannelHeaderBinding;
import com.getstream.sdk.chat.enums.OnlineStatus;
import com.getstream.sdk.chat.rest.response.ChannelState;
import com.getstream.sdk.chat.viewmodel.ChannelViewModel;

import java.util.Date;

import static android.text.format.DateUtils.getRelativeTimeSpanString;
import static com.getstream.sdk.chat.enums.OnlineStatus.CONNECTED;

/*
ChannelHeaderView is used to show a header for a channel
Expand Down Expand Up @@ -66,6 +69,13 @@ public void setViewModel(ChannelViewModel model, LifecycleOwner lifecycleOwner)
viewModel.getChannelState().observe(lifecycleOwner, this::setHeaderTitle);
viewModel.getChannelState().observe(lifecycleOwner, this::setHeaderLastActive);
viewModel.getChannelState().observe(lifecycleOwner, this::configHeaderAvatar);

StreamChat.getOnlineStatus().observe(lifecycleOwner, this::onlineStatus);
binding.setOnlineStatus(StreamChat.getOnlineStatus().getValue() == CONNECTED);
}

protected void onlineStatus(OnlineStatus status) {
binding.setOnlineStatus(status == CONNECTED);
}

protected void setHeaderTitle(ChannelState channelState) {
Expand Down Expand Up @@ -133,6 +143,7 @@ private void applyStyle() {
binding.tvOption.setHeight(style.getOptionsButtonHeight());
// Active Badge
binding.ivActiveBadge.setVisibility(style.isActiveBadgeShow() ? VISIBLE : INVISIBLE);
binding.setOfflineText(style.getOfflineText());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class ChannelHeaderViewStyle extends BaseStyle {
private int optionsButtonWidth;
private int optionsButtonHeight;
private boolean activeBadgeShow;
private String offlineText;


public ChannelHeaderViewStyle(Context c, AttributeSet attrs) {
Expand All @@ -50,6 +51,7 @@ public ChannelHeaderViewStyle(Context c, AttributeSet attrs) {
lastActiveTextSize = (int) a.getDimension(R.styleable.ChannelHeaderView_streamChannelHeaderLastActiveTextSize, getDimension(R.dimen.stream_channel_preview_date));
lastActiveTextColor = a.getColor(R.styleable.ChannelHeaderView_streamChannelHeaderLastActiveTextColor, getColor(R.color.stream_gray_dark));
lastActiveTextStyle = a.getInt(R.styleable.ChannelHeaderView_streamChannelHeaderLastActiveTextStyle, Typeface.NORMAL);
offlineText = a.getString(R.styleable.ChannelHeaderView_streamChannelHeaderOfflineTextStyle);

// Avatar
avatarWidth = a.getDimensionPixelSize(R.styleable.ChannelHeaderView_streamAvatarWidth, getDimension(R.dimen.stream_channel_avatar_width));
Expand Down Expand Up @@ -150,4 +152,7 @@ public int getOptionsButtonHeight() {
return optionsButtonHeight;
}

public String getOfflineText() {
return offlineText != null ? offlineText : "Waiting for network...";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import com.getstream.sdk.chat.rest.response.GetRepliesResponse;
import com.getstream.sdk.chat.rest.response.MessageResponse;
import com.getstream.sdk.chat.storage.Storage;
import com.getstream.sdk.chat.storage.Sync;
import com.getstream.sdk.chat.utils.Constant;
import com.getstream.sdk.chat.utils.MessageListItemLiveData;
import com.getstream.sdk.chat.utils.ResultCallback;
Expand All @@ -58,6 +57,10 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import static com.getstream.sdk.chat.enums.MessageStatus.SENDING;
import static com.getstream.sdk.chat.storage.Sync.LOCAL_FAILED;
import static com.getstream.sdk.chat.storage.Sync.LOCAL_ONLY;
import static com.getstream.sdk.chat.storage.Sync.SYNCED;
import static java.util.UUID.randomUUID;

/*
Expand Down Expand Up @@ -99,8 +102,6 @@ public void onFailure(Exception e) {
initEventHandlers();
}



private Channel channel;
private Looper looper;
private Map<String, Event> typingState;
Expand Down Expand Up @@ -163,14 +164,11 @@ public ChannelViewModel(@NonNull Application application) {
reads = new LazyQueryChannelLiveData<>();
reads.viewModel = this;


entities = new MessageListItemLiveData(client().getUser(), messages, threadMessages, typingUsers, reads);

typingState = new HashMap<>();
editMessage = new MutableLiveData<>();



Callable<Void> markRead = () -> {
channel.markRead(new EventCallback() {
@Override
Expand Down Expand Up @@ -504,7 +502,6 @@ private void replaceMessage(Message oldMessage, Message newMessage) {
newMessage.setStatus(MessageStatus.RECEIVED);
if (oldMessage.getStatus() == MessageStatus.FAILED) {
messagesCopy.remove(oldMessage);
// messagesCopy.add(newMessage);
} else {
messagesCopy.set(i, newMessage);
}
Expand Down Expand Up @@ -549,8 +546,6 @@ private void upsertMessage(Message message) {
markLastMessageRead();
}

// Log.d(TAG,"New messages Count:" + messages.getValue().size());

}

private boolean updateMessage(Message message) {
Expand Down Expand Up @@ -883,46 +878,51 @@ public void onError(String s) {
* @param callback the result callback
*/
public void sendMessage(Message message, MessageCallback callback) {
// send typing.stop immediately
stopTyping();

// TODO: this should be a method at the channel level
if (message.getSyncStatus() == LOCAL_ONLY) {
return;
}

if (message.getStatus() == null) {
message.setSyncStatus(LOCAL_ONLY);
message.setUser(client().getUser());
message.setCreatedAt(new Date());
message.setType("regular");
if (isThread())
message.setParentId(threadParentMessage.getValue().getId());
message.setStatus(client().isConnected() ? MessageStatus.SENDING : MessageStatus.FAILED);
message.setStatus(client().isConnected() ? SENDING : MessageStatus.FAILED);
String clientSideID = client().getUserId() + "-" + randomUUID().toString();
message.setId(clientSideID);
message.preStorage();
message.setSyncStatus(Sync.LOCAL_ONLY);

client().storage().insertMessageForChannel(channel, message);
addMessage(message);
}

if (!client().isConnected()) return;
stopTyping();

if (client().isConnected()) {
channel.getChannelState().setReadDateOfChannelLastMessage(client().getUser(), message.getCreatedAt());
}

channel.getChannelState().setReadDateOfChannelLastMessage(client().getUser(), message.getCreatedAt());
// afterwards send the request
channel.sendMessage(message,
new MessageCallback() {
@Override
public void onSuccess(MessageResponse response) {
replaceMessage(message, response.getMessage());
callback.onSuccess(response);
}
new MessageCallback() {
@Override
public void onSuccess(MessageResponse response) {
replaceMessage(message, response.getMessage());
message.setSyncStatus(SYNCED);
callback.onSuccess(response);
}

@Override
public void onError(String errMsg, int errCode) {
Message clone = message.copy();
clone.setStatus(MessageStatus.FAILED);
updateFailedMessage(clone);
callback.onError(errMsg, errCode);
}
});
@Override
public void onError(String errMsg, int errCode) {
Message clone = message.copy();
clone.setStatus(MessageStatus.FAILED);
clone.setSyncStatus(LOCAL_FAILED);
updateFailedMessage(clone);
callback.onError(errMsg, errCode);
}
});
}

public void sendMessage(Message message) {
Expand Down
25 changes: 0 additions & 25 deletions library/src/main/res/layout/stream_item_no_connection.xml

This file was deleted.

10 changes: 8 additions & 2 deletions library/src/main/res/layout/stream_view_channel_header.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
<variable
name="channelName"
type="String" />
<variable
name="onlineStatus"
type="Boolean" />
<variable
name="offlineText"
type="String" />
</data>


Expand Down Expand Up @@ -54,7 +60,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text='@{channelLastActive}'
android:text='@{onlineStatus ? channelLastActive : offlineText}'
app:layout_constraintBottom_toTopOf="@+id/iv_separator"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
Expand All @@ -73,7 +79,7 @@
android:id="@+id/iv_active_badge"
android:layout_width="8dp"
android:layout_height="8dp"
android:background="@{safeUnbox(viewModel.anyOtherUsersOnline) ? @drawable/stream_circle_user_online : @drawable/stream_circle_user_offline}"
android:background="@{(safeUnbox(viewModel.anyOtherUsersOnline) &amp;&amp; onlineStatus) ? @drawable/stream_circle_user_online : @drawable/stream_circle_user_offline}"
app:layout_constraintEnd_toEndOf="@+id/avatar_group"
app:layout_constraintStart_toEndOf="@+id/avatar_group"
app:layout_constraintTop_toTopOf="@+id/avatar_group" />
Expand Down
2 changes: 2 additions & 0 deletions library/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,8 @@
</attr>

<attr name="streamChannelHeaderBackButtonBackground" format="reference" />

<attr name="streamChannelHeaderOfflineTextStyle" format="string" />
<attr name="streamChannelHeaderBackButtonShow" format="boolean" />

<attr name="streamChannelHeaderOptionsButtonBackground" format="reference" />
Expand Down

0 comments on commit 7966341

Please sign in to comment.