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; ...@@ -18,6 +18,7 @@ import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import chat.rocket.android.LaunchUtil; import chat.rocket.android.LaunchUtil;
import chat.rocket.android.R; import chat.rocket.android.R;
...@@ -49,7 +50,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -49,7 +50,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
private RoomToolbar toolbar; private RoomToolbar toolbar;
private SlidingPaneLayout pane; private SlidingPaneLayout pane;
private MainContract.Presenter presenter; private MainContract.Presenter presenter;
private volatile Snackbar statusTicker; private volatile AtomicReference<Snackbar> statusTicker = new AtomicReference<>();
@Override @Override
public int getLayoutContainerForFragment() { public int getLayoutContainerForFragment() {
...@@ -95,7 +96,9 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -95,7 +96,9 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
presenter.release(); presenter.release();
} }
// Dismiss any status ticker // Dismiss any status ticker
if (statusTicker != null) statusTicker.dismiss(); if (statusTicker.get() != null) {
statusTicker.get().dismiss();
}
super.onPause(); super.onPause();
} }
...@@ -250,31 +253,47 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -250,31 +253,47 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
} }
@Override @Override
public synchronized void showConnectionError() { public void showConnectionError() {
dismissStatusTickerIfShowing(); if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()), statusTicker.get().setText(R.string.fragment_retry_login_error_title)
R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE) .setAction(R.string.fragment_retry_login_retry_title, view -> {
.setAction(R.string.fragment_retry_login_retry_title, view -> statusTicker.set(null);
ConnectivityManager.getInstance(getApplicationContext()).keepAliveServer()); showConnecting();
statusTicker.show(); 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 @Override
public synchronized void showConnecting() { public void showConnecting() {
dismissStatusTickerIfShowing(); if (statusTicker.get() != null && statusTicker.get().isShown()) {
statusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()), statusTicker.get().setText(R.string.server_config_activity_authenticating);
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE); } else {
statusTicker.show(); Snackbar newStatusTicker = Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE);
statusTicker.set(newStatusTicker);
statusTicker.get().show();
}
} }
@Override @Override
public synchronized void showConnectionOk() { public void showConnectionOk() {
dismissStatusTickerIfShowing(); dismissStatusTickerIfShowing();
} }
private void dismissStatusTickerIfShowing() { private void dismissStatusTickerIfShowing() {
if (statusTicker != null) { if (statusTicker != null) {
statusTicker.dismiss(); statusTicker.get().dismiss();
} }
} }
...@@ -334,7 +353,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -334,7 +353,7 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
Fragment fragment = getSupportFragmentManager().findFragmentById(getLayoutContainerForFragment()); Fragment fragment = getSupportFragmentManager().findFragmentById(getLayoutContainerForFragment());
if (fragment != null && fragment instanceof RoomFragment) { if (fragment != null && fragment instanceof RoomFragment) {
RoomFragment roomFragment = (RoomFragment) fragment; RoomFragment roomFragment = (RoomFragment) fragment;
roomFragment.loadMessages(); roomFragment.loadMissedMessages();
} }
} }
......
...@@ -212,7 +212,7 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -212,7 +212,7 @@ public class MainPresenter extends BasePresenter<MainContract.View>
return; return;
} }
view.showConnectionOk(); // view.showConnectionOk();
}, },
Logger::report Logger::report
); );
...@@ -227,12 +227,15 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -227,12 +227,15 @@ public class MainPresenter extends BasePresenter<MainContract.View>
.subscribe( .subscribe(
connectivity -> { connectivity -> {
if (connectivity.state == ServerConnectivity.STATE_CONNECTED) { if (connectivity.state == ServerConnectivity.STATE_CONNECTED) {
view.showConnectionOk(); //TODO: notify almost connected or something like that.
view.refreshRoom(); // view.showConnectionOk();
} else if (connectivity.state == ServerConnectivity.STATE_DISCONNECTED) { } else if (connectivity.state == ServerConnectivity.STATE_DISCONNECTED) {
if (connectivity.code == DDPClient.REASON_NETWORK_ERROR) { if (connectivity.code == DDPClient.REASON_NETWORK_ERROR) {
view.showConnectionError(); view.showConnectionError();
} }
} else if (connectivity.state == ServerConnectivity.STATE_SESSION_ESTABLISHED) {
view.refreshRoom();
view.showConnectionOk();
} else { } else {
view.showConnecting(); view.showConnecting();
} }
......
...@@ -13,67 +13,69 @@ import chat.rocket.core.models.User; ...@@ -13,67 +13,69 @@ import chat.rocket.core.models.User;
public interface RoomContract { 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 ...@@ -716,7 +716,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements
} }
} }
public void loadMessages() { public void loadMissedMessages() {
presenter.loadMessages(); 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