Commit 4c681ab8 authored by Yusuke Iwaki's avatar Yusuke Iwaki

change Token Login to execute in Background, not in ServerConfigActivity.

parent 0a694b50
...@@ -6,9 +6,6 @@ import android.widget.ImageView; ...@@ -6,9 +6,6 @@ import android.widget.ImageView;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.fragment.chatroom.HomeFragment; import chat.rocket.android.fragment.chatroom.HomeFragment;
import chat.rocket.android.helper.Avatar; import chat.rocket.android.helper.Avatar;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.ServerConfig;
import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts;
/** /**
* Entry-point for Rocket.Chat.Android application. * Entry-point for Rocket.Chat.Android application.
...@@ -23,13 +20,6 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -23,13 +20,6 @@ public class MainActivity extends AbstractAuthedActivity {
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
if (savedInstanceState == null) { if (savedInstanceState == null) {
RealmHelperBolts.executeTransaction(realm -> {
for (ServerConfig config : ServerConfig.queryActiveConnections(realm).findAll()) {
config.setTokenVerified(false);
}
return null;
}).continueWith(new LogcatIfError());
showFragment(new HomeFragment()); showFragment(new HomeFragment());
} }
......
...@@ -10,8 +10,6 @@ import chat.rocket.android.R; ...@@ -10,8 +10,6 @@ import chat.rocket.android.R;
import chat.rocket.android.fragment.server_config.InputHostnameFragment; import chat.rocket.android.fragment.server_config.InputHostnameFragment;
import chat.rocket.android.fragment.server_config.LoginFragment; import chat.rocket.android.fragment.server_config.LoginFragment;
import chat.rocket.android.fragment.server_config.WaitingFragment; import chat.rocket.android.fragment.server_config.WaitingFragment;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.MethodCallHelper;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ServerConfig; import chat.rocket.android.model.ServerConfig;
import chat.rocket.android.service.RocketChatService; import chat.rocket.android.service.RocketChatService;
...@@ -123,8 +121,6 @@ public class ServerConfigActivity extends AbstractFragmentActivity { ...@@ -123,8 +121,6 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
final String token = config.getToken(); final String token = config.getToken();
if (!TextUtils.isEmpty(token)) { if (!TextUtils.isEmpty(token)) {
showFragment(WaitingFragment.create("Authenticating...")); showFragment(WaitingFragment.create("Authenticating..."));
new MethodCallHelper(serverConfigId).loginWithToken(token)
.continueWith(new LogcatIfError());
return; return;
} }
......
package chat.rocket.android.model; package chat.rocket.android.model;
import bolts.Task;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.RealmQuery; import io.realm.RealmQuery;
import io.realm.RealmResults;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import jp.co.crowdworks.realm_java_helpers.RealmHelper; import jp.co.crowdworks.realm_java_helpers.RealmHelper;
import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts; import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts;
...@@ -26,10 +28,6 @@ public class ServerConfig extends RealmObject { ...@@ -26,10 +28,6 @@ public class ServerConfig extends RealmObject {
return realm.where(ServerConfig.class).equalTo("tokenVerified", false); return realm.where(ServerConfig.class).equalTo("tokenVerified", false);
} }
public static RealmQuery<ServerConfig> queryActiveConnections(Realm realm) {
return realm.where(ServerConfig.class).isNotNull("token");
}
public static boolean hasLoginRequiredConnection() { public static boolean hasLoginRequiredConnection() {
ServerConfig config = ServerConfig config =
RealmHelper.executeTransactionForRead(realm -> RealmHelper.executeTransactionForRead(realm ->
...@@ -38,6 +36,19 @@ public class ServerConfig extends RealmObject { ...@@ -38,6 +36,19 @@ public class ServerConfig extends RealmObject {
return config != null; return config != null;
} }
public static Task<Void> forceInvalidateToken() {
return RealmHelperBolts.executeTransaction(realm -> {
RealmResults<ServerConfig> targetConfigs = realm.where(ServerConfig.class)
.isNotNull("token")
.equalTo("tokenVerified", true)
.findAll();
for (ServerConfig config : targetConfigs) {
config.setTokenVerified(false);
}
return null;
});
}
@DebugLog public static void logConnectionError(String id, Exception exception) { @DebugLog public static void logConnectionError(String id, Exception exception) {
RealmHelperBolts.executeTransaction( RealmHelperBolts.executeTransaction(
realm -> realm.createOrUpdateObjectFromJson(ServerConfig.class, new JSONObject() realm -> realm.createOrUpdateObjectFromJson(ServerConfig.class, new JSONObject()
......
...@@ -6,6 +6,7 @@ import android.content.Intent; ...@@ -6,6 +6,7 @@ import android.content.Intent;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import bolts.Task; import bolts.Task;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.ServerConfig; import chat.rocket.android.model.ServerConfig;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmResults; import io.realm.RealmResults;
...@@ -52,6 +53,9 @@ public class RocketChatService extends Service { ...@@ -52,6 +53,9 @@ public class RocketChatService extends Service {
@Override public void onCreate() { @Override public void onCreate() {
super.onCreate(); super.onCreate();
webSocketThreads = new HashMap<>(); webSocketThreads = new HashMap<>();
ServerConfig.forceInvalidateToken()
.continueWith(new LogcatIfError());
} }
@Override public int onStartCommand(Intent intent, int flags, int startId) { @Override public int onStartCommand(Intent intent, int flags, int startId) {
......
...@@ -11,6 +11,7 @@ import chat.rocket.android.helper.TextUtils; ...@@ -11,6 +11,7 @@ import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ServerConfig; import chat.rocket.android.model.ServerConfig;
import chat.rocket.android.service.ddp_subscriber.LoginServiceConfigurationSubscriber; import chat.rocket.android.service.ddp_subscriber.LoginServiceConfigurationSubscriber;
import chat.rocket.android.service.observer.MethodCallObserver; import chat.rocket.android.service.observer.MethodCallObserver;
import chat.rocket.android.service.observer.TokenLoginObserver;
import chat.rocket.android.ws.RocketChatWebSocketAPI; import chat.rocket.android.ws.RocketChatWebSocketAPI;
import chat.rocket.android_ddp.DDPClientCallback; import chat.rocket.android_ddp.DDPClientCallback;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
...@@ -28,6 +29,7 @@ import timber.log.Timber; ...@@ -28,6 +29,7 @@ import timber.log.Timber;
public class RocketChatWebSocketThread extends HandlerThread { public class RocketChatWebSocketThread extends HandlerThread {
private static final Class[] REGISTERABLE_CLASSES = { private static final Class[] REGISTERABLE_CLASSES = {
LoginServiceConfigurationSubscriber.class, LoginServiceConfigurationSubscriber.class,
TokenLoginObserver.class,
MethodCallObserver.class MethodCallObserver.class
}; };
private final Context appContext; private final Context appContext;
......
package chat.rocket.android.service.observer;
import android.content.Context;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.MethodCallHelper;
import chat.rocket.android.model.ServerConfig;
import chat.rocket.android.ws.RocketChatWebSocketAPI;
import io.realm.Realm;
import io.realm.RealmResults;
import java.util.List;
public class TokenLoginObserver extends AbstractModelObserver<ServerConfig> {
public TokenLoginObserver(Context context, String serverConfigId, RocketChatWebSocketAPI api) {
super(context, serverConfigId, api);
}
@Override protected RealmResults<ServerConfig> queryItems(Realm realm) {
return realm.where(ServerConfig.class)
.isNotNull("token")
.equalTo("tokenVerified", false)
.findAll();
}
@Override protected void onCollectionChanged(List<ServerConfig> list) {
if (list.isEmpty()) return;
ServerConfig config = list.get(0);
new MethodCallHelper(serverConfigId, webSocketAPI).loginWithToken(config.getToken())
.continueWith(new LogcatIfError());
}
}
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