Commit 49c0e63b authored by Leonardo Aramaki's avatar Leonardo Aramaki

Properly logging-out user

parent c9342bf7
...@@ -347,15 +347,12 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract ...@@ -347,15 +347,12 @@ public class MainActivity extends AbstractAuthedActivity implements MainContract
@DebugLog @DebugLog
public void onLogout() { public void onLogout() {
presenter.prepareToLogout();
if (new RocketChatCache(getApplicationContext()).getSelectedServerHostname() == null) { if (new RocketChatCache(getApplicationContext()).getSelectedServerHostname() == null) {
finish();
LaunchUtil.showMainActivity(this); LaunchUtil.showMainActivity(this);
} else { } else {
onHostnameUpdated(); onHostnameUpdated();
} }
} }
@DebugLog
public void beforeLogoutCleanUp() {
presenter.beforeLogoutCleanUp();
}
} }
...@@ -40,6 +40,6 @@ public interface MainContract { ...@@ -40,6 +40,6 @@ public interface MainContract {
void loadSignedInServers(String hostname); void loadSignedInServers(String hostname);
void beforeLogoutCleanUp(); void prepareToLogout();
} }
} }
...@@ -28,6 +28,7 @@ import chat.rocket.core.models.Session; ...@@ -28,6 +28,7 @@ import chat.rocket.core.models.Session;
import chat.rocket.core.models.User; import chat.rocket.core.models.User;
import chat.rocket.core.repositories.PublicSettingRepository; import chat.rocket.core.repositories.PublicSettingRepository;
import chat.rocket.core.utils.Pair; import chat.rocket.core.utils.Pair;
import hugo.weaving.DebugLog;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
...@@ -133,8 +134,9 @@ public class MainPresenter extends BasePresenter<MainContract.View> ...@@ -133,8 +134,9 @@ public class MainPresenter extends BasePresenter<MainContract.View>
addSubscription(subscription); addSubscription(subscription);
} }
@DebugLog
@Override @Override
public void beforeLogoutCleanUp() { public void prepareToLogout() {
clearSubscriptions(); clearSubscriptions();
} }
......
...@@ -25,7 +25,7 @@ public interface SidebarMainContract { ...@@ -25,7 +25,7 @@ public interface SidebarMainContract {
void show(User user); void show(User user);
void onLogoutCleanUp(); void onPreparedToLogOut();
} }
interface Presenter extends BaseContract.Presenter<View> { interface Presenter extends BaseContract.Presenter<View> {
...@@ -48,6 +48,6 @@ public interface SidebarMainContract { ...@@ -48,6 +48,6 @@ public interface SidebarMainContract {
void onLogout(Continuation<Void, Object> continuation); void onLogout(Continuation<Void, Object> continuation);
void beforeLogoutCleanUp(); void prepareToLogOut();
} }
} }
\ No newline at end of file
...@@ -22,7 +22,6 @@ import java.util.ArrayList; ...@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import bolts.Task;
import chat.rocket.android.BuildConfig; import chat.rocket.android.BuildConfig;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
...@@ -51,6 +50,7 @@ import chat.rocket.persistence.realm.repositories.RealmServerInfoRepository; ...@@ -51,6 +50,7 @@ import chat.rocket.persistence.realm.repositories.RealmServerInfoRepository;
import chat.rocket.persistence.realm.repositories.RealmSessionRepository; import chat.rocket.persistence.realm.repositories.RealmSessionRepository;
import chat.rocket.persistence.realm.repositories.RealmSpotlightRepository; import chat.rocket.persistence.realm.repositories.RealmSpotlightRepository;
import chat.rocket.persistence.realm.repositories.RealmUserRepository; import chat.rocket.persistence.realm.repositories.RealmUserRepository;
import hugo.weaving.DebugLog;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
...@@ -323,17 +323,12 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain ...@@ -323,17 +323,12 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
adapter.setRoomListHeaders(roomListHeaders); adapter.setRoomListHeaders(roomListHeaders);
} }
@DebugLog
@Override @Override
public void onLogoutCleanUp() { public void onPreparedToLogOut() {
Activity activity = getActivity(); final Activity activity = getActivity();
if (activity != null && activity instanceof MainActivity) { if (activity != null && activity instanceof MainActivity) {
((MainActivity) activity).onLogout(); ((MainActivity) activity).onLogout();
presenter.onLogout(task -> {
if (task.isFaulted()) {
return Task.forError(task.getError());
}
return null;
});
} }
} }
...@@ -341,12 +336,7 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain ...@@ -341,12 +336,7 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
rootView.findViewById(R.id.btn_logout).setOnClickListener(view -> { rootView.findViewById(R.id.btn_logout).setOnClickListener(view -> {
closeUserActionContainer(); closeUserActionContainer();
// Clear relative data and set new hostname if any. // Clear relative data and set new hostname if any.
presenter.beforeLogoutCleanUp(); presenter.prepareToLogOut();
final Activity activity = getActivity();
if (activity != null && activity instanceof MainActivity) {
// Clear subscriptions on MainPresenter.
((MainActivity) activity).beforeLogoutCleanUp();
}
}); });
} }
......
...@@ -12,6 +12,7 @@ import bolts.Task; ...@@ -12,6 +12,7 @@ import bolts.Task;
import chat.rocket.android.BackgroundLooper; import chat.rocket.android.BackgroundLooper;
import chat.rocket.android.RocketChatApplication; import chat.rocket.android.RocketChatApplication;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.activity.MainActivity;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.AbsoluteUrlHelper; import chat.rocket.android.helper.AbsoluteUrlHelper;
import chat.rocket.android.helper.LogIfError; import chat.rocket.android.helper.LogIfError;
...@@ -20,6 +21,7 @@ import chat.rocket.android.helper.TextUtils; ...@@ -20,6 +21,7 @@ import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.service.ConnectivityManagerApi; import chat.rocket.android.service.ConnectivityManagerApi;
import chat.rocket.android.shared.BasePresenter; import chat.rocket.android.shared.BasePresenter;
import chat.rocket.android_ddp.DDPClient;
import chat.rocket.core.interactors.RoomInteractor; import chat.rocket.core.interactors.RoomInteractor;
import chat.rocket.core.models.Room; import chat.rocket.core.models.Room;
import chat.rocket.core.models.RoomSidebar; import chat.rocket.core.models.RoomSidebar;
...@@ -29,6 +31,12 @@ import chat.rocket.core.repositories.SpotlightRepository; ...@@ -29,6 +31,12 @@ import chat.rocket.core.repositories.SpotlightRepository;
import chat.rocket.core.repositories.UserRepository; import chat.rocket.core.repositories.UserRepository;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.persistence.realm.models.ddp.RealmEmail;
import chat.rocket.persistence.realm.models.ddp.RealmUser;
import chat.rocket.persistence.realm.models.internal.GetUsersOfRoomsProcedure;
import chat.rocket.persistence.realm.models.internal.LoadMessageProcedure;
import chat.rocket.persistence.realm.models.internal.MethodCall;
import chat.rocket.persistence.realm.models.internal.RealmSession;
import chat.rocket.persistence.realm.repositories.RealmSpotlightRepository; import chat.rocket.persistence.realm.repositories.RealmSpotlightRepository;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
...@@ -150,20 +158,32 @@ public class SidebarMainPresenter extends BasePresenter<SidebarMainContract.View ...@@ -150,20 +158,32 @@ public class SidebarMainPresenter extends BasePresenter<SidebarMainContract.View
} }
@Override @Override
public void beforeLogoutCleanUp() { public void prepareToLogOut() {
clearSubscriptions(); onLogout(task -> {
String currentHostname = rocketChatCache.getSelectedServerHostname(); if (task.isFaulted()) {
RealmHelper realmHelper = RealmStore.getOrCreate(currentHostname); return Task.forError(task.getError());
realmHelper.executeTransaction(realm -> { }
realm.executeTransactionAsync(realmObj -> realmObj.deleteAll());
CookieManager.getInstance().removeAllCookie(); clearSubscriptions();
ConnectivityManagerApi connectivityManagerApi = ConnectivityManager.getInstance(RocketChatApplication.getInstance()); DDPClient.get().close();
connectivityManagerApi.removeServer(currentHostname); String currentHostname = rocketChatCache.getSelectedServerHostname();
rocketChatCache.removeHostname(currentHostname); RealmHelper realmHelper = RealmStore.getOrCreate(currentHostname);
rocketChatCache.removeSelectedRoomId(currentHostname); return realmHelper.executeTransaction(realm -> {
rocketChatCache.setSelectedServerHostname(rocketChatCache.getFirstLoggedHostnameIfAny()); CookieManager.getInstance().removeAllCookie();
view.onLogoutCleanUp(); ConnectivityManagerApi connectivityManagerApi = ConnectivityManager.getInstance(RocketChatApplication.getInstance());
return null; connectivityManagerApi.removeServer(currentHostname);
rocketChatCache.removeHostname(currentHostname);
rocketChatCache.removeSelectedRoomId(currentHostname);
rocketChatCache.setSelectedServerHostname(rocketChatCache.getFirstLoggedHostnameIfAny());
realm.delete(RealmEmail.class);
realm.delete(RealmUser.class);
realm.delete(RealmSession.class);
realm.delete(MethodCall.class);
realm.delete(LoadMessageProcedure.class);
realm.delete(GetUsersOfRoomsProcedure.class);
view.onPreparedToLogOut();
return null;
});
}); });
} }
......
...@@ -109,6 +109,7 @@ import io.reactivex.subjects.BehaviorSubject; ...@@ -109,6 +109,7 @@ import io.reactivex.subjects.BehaviorSubject;
if (serverConnectivityList.containsKey(hostname)) { if (serverConnectivityList.containsKey(hostname)) {
disconnectFromServerIfNeeded(hostname) disconnectFromServerIfNeeded(hostname)
.subscribe(_val -> { .subscribe(_val -> {
System.out.println("Disconnected " + _val);
}, RCLog::e); }, RCLog::e);
} }
} }
...@@ -279,8 +280,11 @@ import io.reactivex.subjects.BehaviorSubject; ...@@ -279,8 +280,11 @@ import io.reactivex.subjects.BehaviorSubject;
if (serviceInterface != null) { if (serviceInterface != null) {
return serviceInterface.disconnectFromServer(hostname) return serviceInterface.disconnectFromServer(hostname)
// //after disconnection from server, remove HOSTNAME key from HashMap //after disconnection from server, remove HOSTNAME key from HashMap
.doAfterTerminate(() -> serverConnectivityList.remove(hostname)); .doAfterTerminate(() -> {
serverConnectivityList.remove(hostname);
serverConnectivityList.put(hostname, ServerConnectivity.STATE_DISCONNECTED);
});
} else { } else {
return Single.error(new IllegalStateException("not prepared")); return Single.error(new IllegalStateException("not prepared"));
} }
......
...@@ -229,6 +229,8 @@ public class RocketChatWebSocketThread extends HandlerThread { ...@@ -229,6 +229,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
RxWebSocketCallback.Close result = _task.getResult(); RxWebSocketCallback.Close result = _task.getResult();
if (result.code == DDPClient.REASON_NETWORK_ERROR) { if (result.code == DDPClient.REASON_NETWORK_ERROR) {
reconnect(); reconnect();
} else {
unregisterListeners();
} }
return null; return null;
}); });
......
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