Commit 1e92423d authored by Yusuke Iwaki's avatar Yusuke Iwaki

show ticker on token login.

parent 7b0bfe19
...@@ -4,7 +4,7 @@ import android.content.Context; ...@@ -4,7 +4,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import chat.rocket.android.activity.AddServerActivity; import chat.rocket.android.activity.AddServerActivity;
import chat.rocket.android.activity.ServerConfigActivity; import chat.rocket.android.activity.LoginActivity;
/** /**
* utility class for launching Activity. * utility class for launching Activity.
...@@ -23,8 +23,8 @@ public class LaunchUtil { ...@@ -23,8 +23,8 @@ public class LaunchUtil {
/** /**
* launch ServerConfigActivity with proper flags. * launch ServerConfigActivity with proper flags.
*/ */
public static void showServerConfigActivity(Context context, String serverCondigId) { public static void showLoginActivity(Context context, String serverCondigId) {
Intent intent = new Intent(context, ServerConfigActivity.class); Intent intent = new Intent(context, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("serverConfigId", serverCondigId); intent.putExtra("serverConfigId", serverCondigId);
context.startActivity(intent); context.startActivity(intent);
......
...@@ -20,7 +20,7 @@ import chat.rocket.android.service.RocketChatService; ...@@ -20,7 +20,7 @@ import chat.rocket.android.service.RocketChatService;
/** /**
* Activity for Login, Sign-up, and Retry connecting... * Activity for Login, Sign-up, and Retry connecting...
*/ */
public class ServerConfigActivity extends AbstractFragmentActivity { public class LoginActivity extends AbstractFragmentActivity {
private String serverConfigId; private String serverConfigId;
private RealmObjectObserver<ServerConfig> serverConfigErrorObserver; private RealmObjectObserver<ServerConfig> serverConfigErrorObserver;
......
...@@ -2,6 +2,7 @@ package chat.rocket.android.activity; ...@@ -2,6 +2,7 @@ package chat.rocket.android.activity;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SlidingPaneLayout; import android.support.v4.widget.SlidingPaneLayout;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.View; import android.view.View;
...@@ -13,6 +14,8 @@ import chat.rocket.android.fragment.chatroom.HomeFragment; ...@@ -13,6 +14,8 @@ import chat.rocket.android.fragment.chatroom.HomeFragment;
import chat.rocket.android.fragment.chatroom.RoomFragment; import chat.rocket.android.fragment.chatroom.RoomFragment;
import chat.rocket.android.fragment.sidebar.SidebarMainFragment; import chat.rocket.android.fragment.sidebar.SidebarMainFragment;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ServerConfig;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.User;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.android.realm_helper.RealmHelper;
...@@ -27,6 +30,7 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -27,6 +30,7 @@ public class MainActivity extends AbstractAuthedActivity {
private RealmObjectObserver<Session> sessionObserver; private RealmObjectObserver<Session> sessionObserver;
private boolean isForeground; private boolean isForeground;
private StatusTicker tipViewManager;
@Override @Override
protected int getLayoutContainerForFragment() { protected int getLayoutContainerForFragment() {
...@@ -38,6 +42,7 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -38,6 +42,7 @@ public class MainActivity extends AbstractAuthedActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
tipViewManager = new StatusTicker();
setupSidebar(); setupSidebar();
if (roomId == null) { if (roomId == null) {
showFragment(new HomeFragment()); showFragment(new HomeFragment());
...@@ -143,11 +148,35 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -143,11 +148,35 @@ public class MainActivity extends AbstractAuthedActivity {
sessionObserver = realmHelper sessionObserver = realmHelper
.createObjectObserver(realm -> .createObjectObserver(realm ->
Session.queryDefaultSession(realm) Session.queryDefaultSession(realm)
.isNotNull(Session.TOKEN) .isNotNull(Session.TOKEN))
.isNull(Session.ERROR))
.setOnUpdateListener(session -> { .setOnUpdateListener(session -> {
if (session == null && isForeground) { if (session == null) {
LaunchUtil.showServerConfigActivity(this, serverConfigId); if (isForeground) {
LaunchUtil.showLoginActivity(this, serverConfigId);
}
tipViewManager.updateStatus(StatusTicker.STATUS_DISMISS, null);
} else if (!TextUtils.isEmpty(session.getError())) {
tipViewManager.updateStatus(StatusTicker.STATUS_CONNECTION_ERROR,
Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.fragment_retry_login_error_title, Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.fragment_retry_login_retry_title, view ->
RealmStore.getDefault()
.executeTransaction(realm -> {
ServerConfig config = realm.where(ServerConfig.class)
.equalTo(ServerConfig.ID, serverConfigId).findFirst();
if (config != null
&& config.getState() == ServerConfig.STATE_CONNECTION_ERROR) {
config.setState(ServerConfig.STATE_READY);
}
return null;
}).continueWith(new LogcatIfError())));
} else if (!session.isTokenVerified()) {
tipViewManager.updateStatus(StatusTicker.STATUS_TOKEN_LOGIN,
Snackbar.make(findViewById(getLayoutContainerForFragment()),
R.string.server_config_activity_authenticating, Snackbar.LENGTH_INDEFINITE));
} else {
tipViewManager.updateStatus(StatusTicker.STATUS_DISMISS, null);
} }
}); });
sessionObserver.sub(); sessionObserver.sub();
...@@ -184,4 +213,34 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -184,4 +213,34 @@ public class MainActivity extends AbstractAuthedActivity {
protected boolean onBackPress() { protected boolean onBackPress() {
return closeSidebarIfNeeded() || super.onBackPress(); return closeSidebarIfNeeded() || super.onBackPress();
} }
//TODO: consider this class to define in layouthelper for more complicated operation.
private static class StatusTicker {
public static final int STATUS_DISMISS = 0;
public static final int STATUS_CONNECTION_ERROR = 1;
public static final int STATUS_TOKEN_LOGIN = 2;
private int status;
private Snackbar snackbar;
public StatusTicker() {
status = STATUS_DISMISS;
}
public void updateStatus(int status, Snackbar snackbar) {
if (status == this.status) {
return;
}
this.status = status;
if (this.snackbar != null) {
this.snackbar.dismiss();
}
if (status != STATUS_DISMISS) {
this.snackbar = snackbar;
if (this.snackbar != null) {
this.snackbar.show();
}
}
}
}
} }
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<string name="fragment_login_username_or_email">Username or email</string> <string name="fragment_login_username_or_email">Username or email</string>
<string name="fragment_login_password">Password</string> <string name="fragment_login_password">Password</string>
<string name="fragment_retry_login_retry_title">RETRY</string> <string name="fragment_retry_login_retry_title">RETRY</string>
<string name="fragment_retry_login_error_title">Oops…</string> <string name="fragment_retry_login_error_title">Connection Error</string>
<string name="add_server_activity_waiting_server">Connecting to server…</string> <string name="add_server_activity_waiting_server">Connecting to server…</string>
<string name="server_config_activity_authenticating">Authenticating…</string> <string name="server_config_activity_authenticating">Authenticating…</string>
<string name="home_fragment_title">Rocket.Chat - Home</string> <string name="home_fragment_title">Rocket.Chat - Home</string>
......
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