Commit 8af265c7 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Refresh opened rooms if conn state is SESSION_ESTABLISHED loading

missed messages for that channel
parent 85c02cc3
......@@ -18,6 +18,7 @@ import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import chat.rocket.android.LaunchUtil;
import chat.rocket.android.R;
......@@ -49,7 +50,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
private RoomToolbar toolbar;
private SlidingPaneLayout pane;
private MainContract.Presenter presenter;
private volatile Snackbar statusTicker;
private volatile AtomicReference<Snackbar> statusTicker = new AtomicReference<>();
@Override
public int getLayoutContainerForFragment() {
......@@ -95,7 +96,9 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
presenter.release();
}
// Dismiss any status ticker
if (statusTicker != null) statusTicker.dismiss();
if (statusTicker.get() != null) {
statusTicker.get().dismiss();
}
super.onPause();
}
......@@ -250,31 +253,47 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
}
@Override
public synchronized void showConnectionError() {
dismissStatusTickerIfShowing();
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.fragment_retry_login_retry_title, view ->
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer());
statusTicker.show();
public void showConnectionError() {
if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker.get().setText(R.string.fragment_retry_login_error_title)
.setAction(R.string.fragment_retry_login_retry_title, view -> {
statusTicker.set(null);
showConnecting();
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer();
});
} else {
Snackbar newStatusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.fragment_retry_login_retry_title, view -> {
statusTicker.set(null);
showConnecting();
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer();
});
statusTicker.set(newStatusTicker);
statusTicker.get().show();
}
}
@Override
public synchronized void showConnecting() {
dismissStatusTickerIfShowing();
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE);
statusTicker.show();
public void showConnecting() {
if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker.get().setText(R.string.server_config_activity_authenticating);
} else {
Snackbar newStatusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE);
statusTicker.set(newStatusTicker);
statusTicker.get().show();
}
}
@Override
public synchronized void showConnectionOk() {
public void showConnectionOk() {
dismissStatusTickerIfShowing();
}
private void dismissStatusTickerIfShowing() {
if (statusTicker != null) {
statusTicker.dismiss();
statusTicker.get().dismiss();
}
}
......@@ -334,7 +353,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
Fragment fragment = getSupportFragmentManager().findFragmentById(getLayoutContainerForFragment());
if (fragment != null && fragment instanceof RoomFragment) {
RoomFragment roomFragment = (RoomFragment) fragment;
roomFragment.loadMessages();
roomFragment.loadMissedMessages();
}
}
......
......@@ -212,7 +212,7 @@ public class MainPresenter extends BasePresenter<MainContract.View>
return;
}
view.showConnectionOk();
// view.showConnectionOk();
},
Logger::report
);
......@@ -227,12 +227,15 @@ public class MainPresenter extends BasePresenter<MainContract.View>
.subscribe(
connectivity -> {
if (connectivity.state == ServerConnectivity.STATE_CONNECTED) {
view.showConnectionOk();
view.refreshRoom();
//TODO: notify almost connected or something like that.
// view.showConnectionOk();
} else if (connectivity.state == ServerConnectivity.STATE_DISCONNECTED) {
if (connectivity.code == DDPClient.REASON_NETWORK_ERROR) {
view.showConnectionError();
}
} else if (connectivity.state == ServerConnectivity.STATE_SESSION_ESTABLISHED) {
view.refreshRoom();
view.showConnectionOk();
} else {
view.showConnecting();
}
......
......@@ -13,67 +13,69 @@ import chat.rocket.core.models.User;
public interface RoomContract {
interface View extends BaseContract.View {
interface View extends BaseContract.View {
void setupWith(RocketChatAbsoluteUrl rocketChatAbsoluteUrl);
void setupWith(RocketChatAbsoluteUrl rocketChatAbsoluteUrl);
void render(Room room);
void render(Room room);
void showUserStatus(User user);
void showUserStatus(User user);
void updateHistoryState(boolean hasNext, boolean isLoaded);
void updateHistoryState(boolean hasNext, boolean isLoaded);
void onMessageSendSuccessfully();
void onMessageSendSuccessfully();
void disableMessageInput();
void disableMessageInput();
void enableMessageInput();
void enableMessageInput();
void showUnreadCount(int count);
void showUnreadCount(int count);
void showMessages(List<Message> messages);
void showMessages(List<Message> messages);
void showMessageSendFailure(Message message);
void showMessageSendFailure(Message message);
void showMessageDeleteFailure(Message message);
void showMessageDeleteFailure(Message message);
void autoloadImages();
void autoloadImages();
void manualLoadImages();
void manualLoadImages();
void onReply(AbsoluteUrl absoluteUrl, String markdown, Message message);
void onReply(AbsoluteUrl absoluteUrl, String markdown, Message message);
void onCopy(String message);
void onCopy(String message);
void showMessageActions(Message message);
}
void showMessageActions(Message message);
}
interface Presenter extends BaseContract.Presenter<View> {
interface Presenter extends BaseContract.Presenter<View> {
void loadMessages();
void loadMessages();
void loadMoreMessages();
void loadMoreMessages();
void onMessageSelected(@Nullable Message message);
void onMessageSelected(@Nullable Message message);
void onMessageTap(@Nullable Message message);
void onMessageTap(@Nullable Message message);
void sendMessage(String messageText);
void sendMessage(String messageText);
void resendMessage(@NonNull Message message);
void resendMessage(@NonNull Message message);
void updateMessage(@NonNull Message message, String content);
void updateMessage(@NonNull Message message, String content);
void deleteMessage(@NonNull Message message);
void deleteMessage(@NonNull Message message);
void onUnreadCount();
void onUnreadCount();
void onMarkAsRead();
void onMarkAsRead();
void refreshRoom();
void refreshRoom();
void replyMessage(@NonNull Message message, boolean justQuote);
void replyMessage(@NonNull Message message, boolean justQuote);
void acceptMessageDeleteFailure(Message message);
}
void acceptMessageDeleteFailure(Message message);
void loadMissedMessages();
}
}
......@@ -716,7 +716,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements
}
}
public void loadMessages() {
presenter.loadMessages();
public void loadMissedMessages() {
presenter.loadMissedMessages();
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment