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;
import chat.rocket.android.R;
import chat.rocket.android.fragment.chatroom.HomeFragment;
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.
......@@ -23,13 +20,6 @@ public class MainActivity extends AbstractAuthedActivity {
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
RealmHelperBolts.executeTransaction(realm -> {
for (ServerConfig config : ServerConfig.queryActiveConnections(realm).findAll()) {
config.setTokenVerified(false);
}
return null;
}).continueWith(new LogcatIfError());
showFragment(new HomeFragment());
}
......
......@@ -10,8 +10,6 @@ import chat.rocket.android.R;
import chat.rocket.android.fragment.server_config.InputHostnameFragment;
import chat.rocket.android.fragment.server_config.LoginFragment;
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.model.ServerConfig;
import chat.rocket.android.service.RocketChatService;
......@@ -123,8 +121,6 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
final String token = config.getToken();
if (!TextUtils.isEmpty(token)) {
showFragment(WaitingFragment.create("Authenticating..."));
new MethodCallHelper(serverConfigId).loginWithToken(token)
.continueWith(new LogcatIfError());
return;
}
......
package chat.rocket.android.model;
import bolts.Task;
import chat.rocket.android.helper.LogcatIfError;
import hugo.weaving.DebugLog;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.RealmQuery;
import io.realm.RealmResults;
import io.realm.annotations.PrimaryKey;
import jp.co.crowdworks.realm_java_helpers.RealmHelper;
import jp.co.crowdworks.realm_java_helpers_bolts.RealmHelperBolts;
......@@ -26,10 +28,6 @@ public class ServerConfig extends RealmObject {
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() {
ServerConfig config =
RealmHelper.executeTransactionForRead(realm ->
......@@ -38,6 +36,19 @@ public class ServerConfig extends RealmObject {
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) {
RealmHelperBolts.executeTransaction(
realm -> realm.createOrUpdateObjectFromJson(ServerConfig.class, new JSONObject()
......
......@@ -6,6 +6,7 @@ import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import bolts.Task;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.ServerConfig;
import io.realm.Realm;
import io.realm.RealmResults;
......@@ -52,6 +53,9 @@ public class RocketChatService extends Service {
@Override public void onCreate() {
super.onCreate();
webSocketThreads = new HashMap<>();
ServerConfig.forceInvalidateToken()
.continueWith(new LogcatIfError());
}
@Override public int onStartCommand(Intent intent, int flags, int startId) {
......
......@@ -11,6 +11,7 @@ import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ServerConfig;
import chat.rocket.android.service.ddp_subscriber.LoginServiceConfigurationSubscriber;
import chat.rocket.android.service.observer.MethodCallObserver;
import chat.rocket.android.service.observer.TokenLoginObserver;
import chat.rocket.android.ws.RocketChatWebSocketAPI;
import chat.rocket.android_ddp.DDPClientCallback;
import hugo.weaving.DebugLog;
......@@ -28,6 +29,7 @@ import timber.log.Timber;
public class RocketChatWebSocketThread extends HandlerThread {
private static final Class[] REGISTERABLE_CLASSES = {
LoginServiceConfigurationSubscriber.class,
TokenLoginObserver.class,
MethodCallObserver.class
};
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