Commit 606498f3 authored by Tiago Cunha's avatar Tiago Cunha

Initial changes

Next: RoomFragment
parent c582b8cb
...@@ -93,7 +93,7 @@ dependencies { ...@@ -93,7 +93,7 @@ dependencies {
compile project(':log-wrapper') compile project(':log-wrapper')
compile project(':android-ddp') compile project(':android-ddp')
compile project(':rocket-chat-android-widgets') compile project(':rocket-chat-android-widgets')
compile project(':realm-helpers') compile project(':persistence-realm')
compile rootProject.ext.supportAppCompat compile rootProject.ext.supportAppCompat
compile rootProject.ext.supportDesign compile rootProject.ext.supportDesign
...@@ -127,6 +127,9 @@ dependencies { ...@@ -127,6 +127,9 @@ dependencies {
compile 'com.github.hotchemi:permissionsdispatcher:2.3.0' compile 'com.github.hotchemi:permissionsdispatcher:2.3.0'
annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.0' annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.0'
provided "com.google.auto.value:auto-value:1.3"
annotationProcessor "com.google.auto.value:auto-value:1.3"
} }
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
...@@ -8,7 +8,7 @@ import io.realm.RealmConfiguration; ...@@ -8,7 +8,7 @@ import io.realm.RealmConfiguration;
import java.util.List; import java.util.List;
import chat.rocket.android.helper.OkHttpHelper; import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.service.ServerInfo; import chat.rocket.android.service.ServerInfo;
import chat.rocket.android.widget.RocketChatWidgets; import chat.rocket.android.widget.RocketChatWidgets;
......
...@@ -11,7 +11,7 @@ import chat.rocket.android.RocketChatCache; ...@@ -11,7 +11,7 @@ import chat.rocket.android.RocketChatCache;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.push.PushConstants; import chat.rocket.android.push.PushConstants;
import chat.rocket.android.push.PushNotificationHandler; import chat.rocket.android.push.PushNotificationHandler;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.service.ServerInfo; import chat.rocket.android.service.ServerInfo;
import icepick.State; import icepick.State;
......
...@@ -10,8 +10,8 @@ import chat.rocket.android.fragment.server_config.LoginFragment; ...@@ -10,8 +10,8 @@ import chat.rocket.android.fragment.server_config.LoginFragment;
import chat.rocket.android.fragment.server_config.RetryLoginFragment; import chat.rocket.android.fragment.server_config.RetryLoginFragment;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
/** /**
......
...@@ -18,12 +18,12 @@ import chat.rocket.android.fragment.sidebar.SidebarMainFragment; ...@@ -18,12 +18,12 @@ 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.helper.TextUtils;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmListObserver; import chat.rocket.persistence.realm.RealmListObserver;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.widget.RoomToolbar; import chat.rocket.android.widget.RoomToolbar;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
...@@ -87,14 +87,14 @@ public class MainActivity extends AbstractAuthedActivity { ...@@ -87,14 +87,14 @@ public class MainActivity extends AbstractAuthedActivity {
private void setUserOnlineIfServerAvailable() { private void setUserOnlineIfServerAvailable() {
if (hostname != null) { if (hostname != null) {
new MethodCallHelper(this, hostname).setUserPresence(User.STATUS_ONLINE) new MethodCallHelper(this, hostname).setUserPresence(RealmUser.STATUS_ONLINE)
.continueWith(new LogcatIfError()); .continueWith(new LogcatIfError());
} }
} }
private void setUserAwayIfServerAvailable() { private void setUserAwayIfServerAvailable() {
if (hostname != null) { if (hostname != null) {
new MethodCallHelper(this, hostname).setUserPresence(User.STATUS_AWAY) new MethodCallHelper(this, hostname).setUserPresence(RealmUser.STATUS_AWAY)
.continueWith(new LogcatIfError()); .continueWith(new LogcatIfError());
} }
} }
......
...@@ -6,7 +6,7 @@ import org.json.JSONObject; ...@@ -6,7 +6,7 @@ import org.json.JSONObject;
import bolts.Task; import bolts.Task;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
......
...@@ -12,13 +12,13 @@ import bolts.Task; ...@@ -12,13 +12,13 @@ import bolts.Task;
import chat.rocket.android.helper.CheckSum; import chat.rocket.android.helper.CheckSum;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.model.ddp.PublicSetting; import chat.rocket.android.model.ddp.PublicSetting;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.model.internal.MethodCall; import chat.rocket.android.model.internal.MethodCall;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android_ddp.DDPClientCallback; import chat.rocket.android_ddp.DDPClientCallback;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
...@@ -107,7 +107,7 @@ public class MethodCallHelper { ...@@ -107,7 +107,7 @@ public class MethodCallHelper {
} }
/** /**
* Register User. * Register RealmUser.
*/ */
public Task<String> registerUser(final String name, final String email, public Task<String> registerUser(final String name, final String email,
final String password, final String confirmPassword) { final String password, final String confirmPassword) {
...@@ -241,18 +241,18 @@ public class MethodCallHelper { ...@@ -241,18 +241,18 @@ public class MethodCallHelper {
JSONObject result = task.getResult(); JSONObject result = task.getResult();
final JSONArray messages = result.getJSONArray("messages"); final JSONArray messages = result.getJSONArray("messages");
for (int i = 0; i < messages.length(); i++) { for (int i = 0; i < messages.length(); i++) {
Message.customizeJson(messages.getJSONObject(i)); RealmMessage.customizeJson(messages.getJSONObject(i));
} }
return realmHelper.executeTransaction(realm -> { return realmHelper.executeTransaction(realm -> {
if (timestamp == 0) { if (timestamp == 0) {
realm.where(Message.class) realm.where(RealmMessage.class)
.equalTo("rid", roomId) .equalTo("rid", roomId)
.equalTo("syncstate", SyncState.SYNCED) .equalTo("syncstate", SyncState.SYNCED)
.findAll().deleteAllFromRealm(); .findAll().deleteAllFromRealm();
} }
if (messages.length() > 0) { if (messages.length() > 0) {
realm.createOrUpdateAllFromJson(Message.class, messages); realm.createOrUpdateAllFromJson(RealmMessage.class, messages);
} }
return null; return null;
}).onSuccessTask(_task -> Task.forResult(messages)); }).onSuccessTask(_task -> Task.forResult(messages));
......
...@@ -7,7 +7,7 @@ import org.json.JSONArray; ...@@ -7,7 +7,7 @@ import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import bolts.Task; import bolts.Task;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
public class RaixPushHelper extends MethodCallHelper { public class RaixPushHelper extends MethodCallHelper {
......
...@@ -3,10 +3,10 @@ package chat.rocket.android.api.rest; ...@@ -3,10 +3,10 @@ package chat.rocket.android.api.rest;
import android.content.Context; import android.content.Context;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
public class DefaultCookieProvider implements CookieProvider { public class DefaultCookieProvider implements CookieProvider {
...@@ -33,8 +33,8 @@ public class DefaultCookieProvider implements CookieProvider { ...@@ -33,8 +33,8 @@ public class DefaultCookieProvider implements CookieProvider {
return ""; return "";
} }
final User user = realmHelper.executeTransactionForRead(realm -> final RealmUser user = realmHelper.executeTransactionForRead(realm ->
User.queryCurrentUser(realm).findFirst()); RealmUser.queryCurrentUser(realm).findFirst());
final Session session = realmHelper.executeTransactionForRead(realm -> final Session session = realmHelper.executeTransactionForRead(realm ->
Session.queryDefaultSession(realm).findFirst()); Session.queryDefaultSession(realm).findFirst());
......
...@@ -104,6 +104,4 @@ public abstract class AbstractWebViewFragment extends AbstractFragment ...@@ -104,6 +104,4 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
protected boolean onHandleCallback(WebView webview, String url) { protected boolean onHandleCallback(WebView webview, String url) {
return false; return false;
} }
;
} }
package chat.rocket.android.fragment.add_server;
import android.support.annotation.NonNull;
public interface InputHostnameContract {
interface View {
void showLoader();
void hideLoader();
void showInvalidServerError();
void showConnectionError();
void showHome();
}
interface Presenter {
void bindView(@NonNull View view);
void release();
void connectTo(String hostname);
}
}
package chat.rocket.android.fragment.add_server; package chat.rocket.android.fragment.add_server;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar; import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import chat.rocket.android.BuildConfig; import chat.rocket.android.BuildConfig;
import chat.rocket.android.LaunchUtil; import chat.rocket.android.LaunchUtil;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.api.rest.DefaultServerPolicyApi;
import chat.rocket.android.api.rest.ServerPolicyApi;
import chat.rocket.android.fragment.AbstractFragment; import chat.rocket.android.fragment.AbstractFragment;
import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.helper.ServerPolicyApiValidationHelper;
import chat.rocket.android.helper.ServerPolicyHelper;
import chat.rocket.android.helper.TextUtils; 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 rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/** /**
* Input server host. * Input server host.
*/ */
public class InputHostnameFragment extends AbstractFragment { public class InputHostnameFragment extends AbstractFragment implements InputHostnameContract.View {
Subscription serverPolicySubscription;
private InputHostnameContract.Presenter presenter;
public InputHostnameFragment() { public InputHostnameFragment() {
} }
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Context appContext = getContext().getApplicationContext();
presenter = new InputHostnamePresenter(
RocketChatCache.get(appContext),
ConnectivityManager.getInstance(appContext));
}
@Override @Override
protected int getLayout() { protected int getLayout() {
return R.layout.fragment_input_hostname; return R.layout.fragment_input_hostname;
...@@ -47,42 +54,18 @@ public class InputHostnameFragment extends AbstractFragment { ...@@ -47,42 +54,18 @@ public class InputHostnameFragment extends AbstractFragment {
} }
private void handleConnect() { private void handleConnect() {
final String hostname = ServerPolicyHelper.enforceHostname(getHostname()); presenter.connectTo(getHostname());
}
final ServerPolicyApi serverPolicyApi =
new DefaultServerPolicyApi(OkHttpHelper.getClientForUploadFile(), hostname);
final ServerPolicyApiValidationHelper validationHelper =
new ServerPolicyApiValidationHelper(serverPolicyApi);
if (serverPolicySubscription != null) {
serverPolicySubscription.unsubscribe();
}
rootView.findViewById(R.id.btn_connect).setEnabled(false);
serverPolicySubscription = ServerPolicyHelper.isApiVersionValid(validationHelper) @Override
.subscribeOn(Schedulers.io()) public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
.observeOn(AndroidSchedulers.mainThread()) super.onViewCreated(view, savedInstanceState);
.doOnTerminate(() -> rootView.findViewById(R.id.btn_connect).setEnabled(true)) presenter.bindView(this);
.subscribe(
serverValidation -> {
if (serverValidation.isValid()) {
onServerValid(hostname, serverValidation.usesSecureConnection());
} else {
showError(getString(R.string.input_hostname_invalid_server_message));
}
},
throwable -> {
showError(getString(R.string.connection_error_try_later));
});
} }
@Override @Override
public void onDestroyView() { public void onDestroyView() {
if (serverPolicySubscription != null) { presenter.release();
serverPolicySubscription.unsubscribe();
}
super.onDestroyView(); super.onDestroyView();
} }
...@@ -92,21 +75,33 @@ public class InputHostnameFragment extends AbstractFragment { ...@@ -92,21 +75,33 @@ public class InputHostnameFragment extends AbstractFragment {
return TextUtils.or(TextUtils.or(editor.getText(), editor.getHint()), "").toString(); return TextUtils.or(TextUtils.or(editor.getText(), editor.getHint()), "").toString();
} }
private void onServerValid(final String hostname, boolean usesSecureConnection) { private void showError(String errString) {
RocketChatCache.get(getContext()).edit() Snackbar.make(rootView, errString, Snackbar.LENGTH_LONG).show();
.putString(RocketChatCache.KEY_SELECTED_SERVER_HOSTNAME, hostname) }
.apply();
ConnectivityManagerApi connectivityManager = @Override
ConnectivityManager.getInstance(getContext().getApplicationContext()); public void showLoader() {
connectivityManager.addOrUpdateServer(hostname, hostname, !usesSecureConnection); rootView.findViewById(R.id.btn_connect).setEnabled(false);
connectivityManager.keepAliveServer(); }
LaunchUtil.showMainActivity(getContext()); @Override
getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); public void hideLoader() {
rootView.findViewById(R.id.btn_connect).setEnabled(true);
} }
private void showError(String errString) { @Override
Snackbar.make(rootView, errString, Snackbar.LENGTH_LONG).show(); public void showInvalidServerError() {
showError(getString(R.string.input_hostname_invalid_server_message));
}
@Override
public void showConnectionError() {
showError(getString(R.string.connection_error_try_later));
}
@Override
public void showHome() {
LaunchUtil.showMainActivity(getContext());
getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
} }
} }
package chat.rocket.android.fragment.add_server;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import chat.rocket.android.RocketChatCache;
import chat.rocket.android.api.rest.DefaultServerPolicyApi;
import chat.rocket.android.api.rest.ServerPolicyApi;
import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.helper.ServerPolicyApiValidationHelper;
import chat.rocket.android.helper.ServerPolicyHelper;
import chat.rocket.android.service.ConnectivityManagerApi;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class InputHostnamePresenter implements InputHostnameContract.Presenter {
private final SharedPreferences rocketChatCache;
private final ConnectivityManagerApi connectivityManager;
public InputHostnamePresenter(SharedPreferences rocketChatCache,
ConnectivityManagerApi connectivityManager) {
this.rocketChatCache = rocketChatCache;
this.connectivityManager = connectivityManager;
}
private InputHostnameContract.View view;
private Subscription serverPolicySubscription;
@Override
public void bindView(@NonNull InputHostnameContract.View view) {
this.view = view;
}
@Override
public void release() {
if (serverPolicySubscription != null) {
serverPolicySubscription.unsubscribe();
}
view = null;
}
@Override
public void connectTo(final String hostname) {
view.showLoader();
connectToEnforced(ServerPolicyHelper.enforceHostname(hostname));
}
public void connectToEnforced(final String hostname) {
final ServerPolicyApi serverPolicyApi =
new DefaultServerPolicyApi(OkHttpHelper.getClientForUploadFile(), hostname);
final ServerPolicyApiValidationHelper validationHelper =
new ServerPolicyApiValidationHelper(serverPolicyApi);
if (serverPolicySubscription != null) {
serverPolicySubscription.unsubscribe();
}
serverPolicySubscription = ServerPolicyHelper.isApiVersionValid(validationHelper)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnTerminate(() -> view.hideLoader())
.subscribe(
serverValidation -> {
if (serverValidation.isValid()) {
onServerValid(hostname, serverValidation.usesSecureConnection());
} else {
view.showInvalidServerError();
}
},
throwable -> {
view.showConnectionError();
});
}
private void onServerValid(final String hostname, boolean usesSecureConnection) {
rocketChatCache.edit()
.putString(RocketChatCache.KEY_SELECTED_SERVER_HOSTNAME, hostname)
.apply();
connectivityManager.addOrUpdateServer(hostname, hostname, !usesSecureConnection);
connectivityManager.keepAliveServer();
view.showHome();
}
}
...@@ -51,15 +51,15 @@ import chat.rocket.android.layouthelper.extra_action.upload.ImageUploadActionIte ...@@ -51,15 +51,15 @@ import chat.rocket.android.layouthelper.extra_action.upload.ImageUploadActionIte
import chat.rocket.android.layouthelper.extra_action.upload.VideoUploadActionItem; import chat.rocket.android.layouthelper.extra_action.upload.VideoUploadActionItem;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.model.internal.LoadMessageProcedure; import chat.rocket.android.model.internal.LoadMessageProcedure;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmModelListAdapter; import chat.rocket.persistence.realm.RealmModelListAdapter;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.widget.internal.ExtraActionPickerDialogFragment; import chat.rocket.android.widget.internal.ExtraActionPickerDialogFragment;
import chat.rocket.android.widget.message.MessageFormLayout; import chat.rocket.android.widget.message.MessageFormLayout;
...@@ -75,6 +75,8 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -75,6 +75,8 @@ public class RoomFragment extends AbstractChatRoomFragment
RealmModelListAdapter.OnItemClickListener<PairedMessage> { RealmModelListAdapter.OnItemClickListener<PairedMessage> {
private static final int DIALOG_ID = 1; private static final int DIALOG_ID = 1;
private static final String HOSTNAME = "hostname";
private static final String ROOM_ID = "roomId";
private String hostname; private String hostname;
private RealmHelper realmHelper; private RealmHelper realmHelper;
...@@ -96,8 +98,8 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -96,8 +98,8 @@ public class RoomFragment extends AbstractChatRoomFragment
} }
public static boolean canCreate(RealmHelper realmHelper) { public static boolean canCreate(RealmHelper realmHelper) {
User currentUser = realmHelper.executeTransactionForRead(realm -> RealmUser currentUser = realmHelper.executeTransactionForRead(realm ->
User.queryCurrentUser(realm).findFirst()); RealmUser.queryCurrentUser(realm).findFirst());
Session session = realmHelper.executeTransactionForRead(realm -> Session session = realmHelper.executeTransactionForRead(realm ->
Session.queryDefaultSession(realm).findFirst()); Session.queryDefaultSession(realm).findFirst());
return currentUser != null && session != null; return currentUser != null && session != null;
...@@ -108,8 +110,8 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -108,8 +110,8 @@ public class RoomFragment extends AbstractChatRoomFragment
*/ */
public static RoomFragment create(String hostname, String roomId) { public static RoomFragment create(String hostname, String roomId) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("hostname", hostname); args.putString(HOSTNAME, hostname);
args.putString("roomId", roomId); args.putString(ROOM_ID, roomId);
RoomFragment fragment = new RoomFragment(); RoomFragment fragment = new RoomFragment();
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
...@@ -120,11 +122,11 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -120,11 +122,11 @@ public class RoomFragment extends AbstractChatRoomFragment
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Bundle args = getArguments(); Bundle args = getArguments();
hostname = args.getString("hostname"); hostname = args.getString(HOSTNAME);
realmHelper = RealmStore.get(hostname); realmHelper = RealmStore.get(hostname);
roomId = args.getString("roomId"); roomId = args.getString(ROOM_ID);
userId = realmHelper.executeTransactionForRead(realm -> userId = realmHelper.executeTransactionForRead(realm ->
User.queryCurrentUser(realm).findFirst()).getId(); RealmUser.queryCurrentUser(realm).findFirst()).getId();
token = realmHelper.executeTransactionForRead(realm -> token = realmHelper.executeTransactionForRead(realm ->
Session.queryDefaultSession(realm).findFirst()).getToken(); Session.queryDefaultSession(realm).findFirst()).getToken();
roomObserver = realmHelper roomObserver = realmHelper
...@@ -151,9 +153,9 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -151,9 +153,9 @@ public class RoomFragment extends AbstractChatRoomFragment
protected void onSetupView() { protected void onSetupView() {
RecyclerView listView = (RecyclerView) rootView.findViewById(R.id.recyclerview); RecyclerView listView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
MessageListAdapter adapter = (MessageListAdapter) realmHelper.createListAdapter(getContext(), MessageListAdapter adapter = (MessageListAdapter) realmHelper.createListAdapter(getContext(),
realm -> realm.where(Message.class) realm -> realm.where(RealmMessage.class)
.equalTo(Message.ROOM_ID, roomId) .equalTo(RealmMessage.ROOM_ID, roomId)
.findAllSorted(Message.TIMESTAMP, Sort.DESCENDING), .findAllSorted(RealmMessage.TIMESTAMP, Sort.DESCENDING),
context -> new MessageListAdapter(context, hostname, userId, token) context -> new MessageListAdapter(context, hostname, userId, token)
); );
listView.setAdapter(adapter); listView.setAdapter(adapter);
...@@ -233,10 +235,10 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -233,10 +235,10 @@ public class RoomFragment extends AbstractChatRoomFragment
realm.where(RoomSubscription.class).equalTo(RoomSubscription.ROOM_ID, roomId).findFirst()); realm.where(RoomSubscription.class).equalTo(RoomSubscription.ROOM_ID, roomId).findFirst());
if (room != null) { if (room != null) {
return realmHelper.executeTransactionForReadResults(realm -> return realmHelper.executeTransactionForReadResults(realm ->
realm.where(Message.class) realm.where(RealmMessage.class)
.equalTo(Message.ROOM_ID, roomId) .equalTo(RealmMessage.ROOM_ID, roomId)
.greaterThanOrEqualTo(Message.TIMESTAMP, room.getLastSeen()) .greaterThanOrEqualTo(RealmMessage.TIMESTAMP, room.getLastSeen())
.notEqualTo(Message.USER_ID, userId) .notEqualTo(RealmMessage.USER_ID, userId)
.findAll()).size(); .findAll()).size();
} else { } else {
return 0; return 0;
...@@ -259,16 +261,16 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -259,16 +261,16 @@ public class RoomFragment extends AbstractChatRoomFragment
new AlertDialog.Builder(getContext()) new AlertDialog.Builder(getContext())
.setPositiveButton(R.string.resend, (dialog, which) -> { .setPositiveButton(R.string.resend, (dialog, which) -> {
realmHelper.executeTransaction(realm -> realmHelper.executeTransaction(realm ->
realm.createOrUpdateObjectFromJson(Message.class, new JSONObject() realm.createOrUpdateObjectFromJson(RealmMessage.class, new JSONObject()
.put(Message.ID, messageId) .put(RealmMessage.ID, messageId)
.put(Message.SYNC_STATE, SyncState.NOT_SYNCED)) .put(RealmMessage.SYNC_STATE, SyncState.NOT_SYNCED))
).continueWith(new LogcatIfError()); ).continueWith(new LogcatIfError());
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.setNeutralButton(R.string.discard, (dialog, which) -> { .setNeutralButton(R.string.discard, (dialog, which) -> {
realmHelper.executeTransaction(realm -> realmHelper.executeTransaction(realm ->
realm.where(Message.class) realm.where(RealmMessage.class)
.equalTo(Message.ID, messageId).findAll().deleteAllFromRealm() .equalTo(RealmMessage.ID, messageId).findAll().deleteAllFromRealm()
).continueWith(new LogcatIfError()); ).continueWith(new LogcatIfError());
}) })
.show(); .show();
...@@ -524,14 +526,14 @@ public class RoomFragment extends AbstractChatRoomFragment ...@@ -524,14 +526,14 @@ public class RoomFragment extends AbstractChatRoomFragment
private Task<Void> sendMessage(String messageText) { private Task<Void> sendMessage(String messageText) {
return realmHelper.executeTransaction(realm -> return realmHelper.executeTransaction(realm ->
realm.createOrUpdateObjectFromJson(Message.class, new JSONObject() realm.createOrUpdateObjectFromJson(RealmMessage.class, new JSONObject()
.put(Message.ID, UUID.randomUUID().toString()) .put(RealmMessage.ID, UUID.randomUUID().toString())
.put(Message.SYNC_STATE, SyncState.NOT_SYNCED) .put(RealmMessage.SYNC_STATE, SyncState.NOT_SYNCED)
.put(Message.TIMESTAMP, System.currentTimeMillis()) .put(RealmMessage.TIMESTAMP, System.currentTimeMillis())
.put(Message.ROOM_ID, roomId) .put(RealmMessage.ROOM_ID, roomId)
.put(Message.USER, new JSONObject() .put(RealmMessage.USER, new JSONObject()
.put(User.ID, userId)) .put(RealmUser.ID, userId))
.put(Message.MESSAGE, messageText))) .put(RealmMessage.MESSAGE, messageText)))
.onSuccess(_task -> { .onSuccess(_task -> {
scrollToLatestMessage(); scrollToLatestMessage();
return null; return null;
......
...@@ -7,8 +7,8 @@ import android.support.annotation.NonNull; ...@@ -7,8 +7,8 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.BottomSheetDialogFragment; import android.support.design.widget.BottomSheetDialogFragment;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
abstract class AbstractChatRoomDialogFragment extends BottomSheetDialogFragment { abstract class AbstractChatRoomDialogFragment extends BottomSheetDialogFragment {
......
...@@ -11,7 +11,7 @@ import android.widget.Toast; ...@@ -11,7 +11,7 @@ import android.widget.Toast;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.internal.FileUploading; import chat.rocket.android.model.internal.FileUploading;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.renderer.FileUploadingRenderer; import chat.rocket.android.renderer.FileUploadingRenderer;
/** /**
......
...@@ -19,7 +19,7 @@ import chat.rocket.android.layouthelper.chatroom.dialog.RoomUserAdapter; ...@@ -19,7 +19,7 @@ import chat.rocket.android.layouthelper.chatroom.dialog.RoomUserAdapter;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure; import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
/** /**
......
...@@ -15,7 +15,7 @@ import chat.rocket.android.fragment.AbstractWebViewFragment; ...@@ -15,7 +15,7 @@ import chat.rocket.android.fragment.AbstractWebViewFragment;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration; import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
public abstract class AbstractOAuthFragment extends AbstractWebViewFragment { public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
......
...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.TextUtils; ...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.oauth.OAuthProviderInfo; import chat.rocket.android.layouthelper.oauth.OAuthProviderInfo;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration; import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration;
import chat.rocket.android.realm_helper.RealmListObserver; import chat.rocket.persistence.realm.RealmListObserver;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
/** /**
* Login screen. * Login screen.
......
...@@ -9,8 +9,8 @@ import chat.rocket.android.R; ...@@ -9,8 +9,8 @@ import chat.rocket.android.R;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
/** /**
* Login screen. * Login screen.
......
package chat.rocket.android.fragment.sidebar;
import android.support.annotation.NonNull;
import java.util.List;
import chat.rocket.android.model.core.Room;
import chat.rocket.android.model.core.User;
public interface SidebarMainContract {
interface View {
void showScreen();
void showEmptyScreen();
void showRoomList(List<Room> roomList);
void showUser(User user);
}
interface Presenter {
void bindView(@NonNull View view);
void release();
void onUserOnline();
void onUserAway();
void onUserBusy();
void onUserOffline();
void onLogout();
}
}
...@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.sidebar; ...@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.sidebar;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment; import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
...@@ -10,6 +11,7 @@ import android.widget.TextView; ...@@ -10,6 +11,7 @@ import android.widget.TextView;
import com.jakewharton.rxbinding.view.RxView; import com.jakewharton.rxbinding.view.RxView;
import com.jakewharton.rxbinding.widget.RxCompoundButton; import com.jakewharton.rxbinding.widget.RxCompoundButton;
import java.util.List;
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;
...@@ -18,25 +20,25 @@ import chat.rocket.android.fragment.AbstractFragment; ...@@ -18,25 +20,25 @@ import chat.rocket.android.fragment.AbstractFragment;
import chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment; import chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment;
import chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment; import chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment;
import chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment; import chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.chatroom.RoomListManager; import chat.rocket.android.layouthelper.chatroom.RoomListManager;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.core.Room;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.core.User;
import chat.rocket.android.realm_helper.RealmHelper;
import chat.rocket.android.realm_helper.RealmListObserver;
import chat.rocket.android.realm_helper.RealmObjectObserver;
import chat.rocket.android.realm_helper.RealmStore;
import chat.rocket.android.renderer.UserRenderer; import chat.rocket.android.renderer.UserRenderer;
import chat.rocket.android.repositories.RealmRoomRepository;
import chat.rocket.android.repositories.RealmUserRepository;
import chat.rocket.android.widget.RocketChatAvatar; import chat.rocket.android.widget.RocketChatAvatar;
import chat.rocket.persistence.realm.RealmStore;
public class SidebarMainFragment extends AbstractFragment { public class SidebarMainFragment extends AbstractFragment implements SidebarMainContract.View {
private static final String HOSTNAME = "hostname";
private SidebarMainContract.Presenter presenter;
private String hostname;
private RoomListManager roomListManager; private RoomListManager roomListManager;
private RealmListObserver<RoomSubscription> roomsObserver;
private RealmObjectObserver<User> currentUserObserver; private String hostname;
private MethodCallHelper methodCallHelper;
public SidebarMainFragment() { public SidebarMainFragment() {
} }
...@@ -46,10 +48,11 @@ public class SidebarMainFragment extends AbstractFragment { ...@@ -46,10 +48,11 @@ public class SidebarMainFragment extends AbstractFragment {
*/ */
public static SidebarMainFragment create(String hostname) { public static SidebarMainFragment create(String hostname) {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString("hostname", hostname); args.putString(HOSTNAME, hostname);
SidebarMainFragment fragment = new SidebarMainFragment(); SidebarMainFragment fragment = new SidebarMainFragment();
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
} }
...@@ -58,40 +61,35 @@ public class SidebarMainFragment extends AbstractFragment { ...@@ -58,40 +61,35 @@ public class SidebarMainFragment extends AbstractFragment {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Bundle args = getArguments(); Bundle args = getArguments();
hostname = args == null ? null : args.getString("hostname"); hostname = args == null ? null : args.getString(HOSTNAME);
if (!TextUtils.isEmpty(hostname)) {
RealmHelper realmHelper = RealmStore.get(hostname); presenter = new SidebarMainPresenter(
if (realmHelper != null) { hostname,
roomsObserver = realmHelper new RealmRoomRepository(RealmStore.getRealm(hostname)),
.createListObserver( new RealmUserRepository(RealmStore.getRealm(hostname)),
realm -> realm.where(RoomSubscription.class).equalTo(RoomSubscription.OPEN, true) TextUtils.isEmpty(hostname) ? null : new MethodCallHelper(getContext(), hostname)
.findAll()) );
.setOnUpdateListener(list -> roomListManager.setRooms(list)); }
currentUserObserver = realmHelper @Override
.createObjectObserver(User::queryCurrentUser) public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
.setOnUpdateListener(this::onCurrentUser); super.onViewCreated(view, savedInstanceState);
presenter.bindView(this);
methodCallHelper = new MethodCallHelper(getContext(), hostname); }
}
} @Override
public void onDestroyView() {
presenter.release();
super.onDestroyView();
} }
@Override @Override
protected int getLayout() { protected int getLayout() {
if (hostname == null) { return R.layout.fragment_sidebar_main;
return R.layout.simple_screen;
} else {
return R.layout.fragment_sidebar_main;
}
} }
@Override @Override
protected void onSetupView() { protected void onSetupView() {
if (hostname == null) {
return;
}
setupUserActionToggle(); setupUserActionToggle();
setupUserStatusButtons(); setupUserStatusButtons();
setupLogoutButton(); setupLogoutButton();
...@@ -123,26 +121,22 @@ public class SidebarMainFragment extends AbstractFragment { ...@@ -123,26 +121,22 @@ public class SidebarMainFragment extends AbstractFragment {
} }
private void setupUserStatusButtons() { private void setupUserStatusButtons() {
rootView.findViewById(R.id.btn_status_online).setOnClickListener(view -> rootView.findViewById(R.id.btn_status_online).setOnClickListener(view -> {
updateCurrentUserStatus(User.STATUS_ONLINE)); presenter.onUserOnline();
rootView.findViewById(R.id.btn_status_away).setOnClickListener(view ->
updateCurrentUserStatus(User.STATUS_AWAY));
rootView.findViewById(R.id.btn_status_busy).setOnClickListener(view ->
updateCurrentUserStatus(User.STATUS_BUSY));
rootView.findViewById(R.id.btn_status_invisible).setOnClickListener(view ->
updateCurrentUserStatus(User.STATUS_OFFLINE));
}
private void updateCurrentUserStatus(String status) {
if (methodCallHelper != null) {
methodCallHelper.setUserStatus(status).continueWith(new LogcatIfError());
closeUserActionContainer(); closeUserActionContainer();
} });
} rootView.findViewById(R.id.btn_status_away).setOnClickListener(view -> {
presenter.onUserAway();
private void onCurrentUser(User user) { closeUserActionContainer();
onRenderCurrentUser(user); });
updateRoomListMode(user); rootView.findViewById(R.id.btn_status_busy).setOnClickListener(view -> {
presenter.onUserBusy();
closeUserActionContainer();
});
rootView.findViewById(R.id.btn_status_invisible).setOnClickListener(view -> {
presenter.onUserOffline();
closeUserActionContainer();
});
} }
private void onRenderCurrentUser(User user) { private void onRenderCurrentUser(User user) {
...@@ -163,10 +157,8 @@ public class SidebarMainFragment extends AbstractFragment { ...@@ -163,10 +157,8 @@ public class SidebarMainFragment extends AbstractFragment {
private void setupLogoutButton() { private void setupLogoutButton() {
rootView.findViewById(R.id.btn_logout).setOnClickListener(view -> { rootView.findViewById(R.id.btn_logout).setOnClickListener(view -> {
if (methodCallHelper != null) { presenter.onLogout();
methodCallHelper.logout().continueWith(new LogcatIfError()); closeUserActionContainer();
closeUserActionContainer();
}
}); });
} }
...@@ -198,20 +190,23 @@ public class SidebarMainFragment extends AbstractFragment { ...@@ -198,20 +190,23 @@ public class SidebarMainFragment extends AbstractFragment {
} }
@Override @Override
public void onResume() { public void showScreen() {
super.onResume(); rootView.setVisibility(View.VISIBLE);
if (roomsObserver != null) {
roomsObserver.sub();
currentUserObserver.sub();
}
} }
@Override @Override
public void onPause() { public void showEmptyScreen() {
if (roomsObserver != null) { rootView.setVisibility(View.INVISIBLE);
currentUserObserver.unsub(); }
roomsObserver.unsub();
} @Override
super.onPause(); public void showRoomList(List<Room> roomList) {
roomListManager.setRooms(roomList);
}
@Override
public void showUser(User user) {
onRenderCurrentUser(user);
updateRoomListMode(user);
} }
} }
package chat.rocket.android.fragment.sidebar;
import android.support.annotation.NonNull;
import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.core.User;
import chat.rocket.android.repositories.RoomRepository;
import chat.rocket.android.repositories.UserRepository;
import rx.Subscription;
import rx.subscriptions.CompositeSubscription;
public class SidebarMainPresenter implements SidebarMainContract.Presenter {
private final String hostname;
private final RoomRepository roomRepository;
private final UserRepository userRepository;
private final MethodCallHelper methodCallHelper;
private SidebarMainContract.View view;
private CompositeSubscription compositeSubscription = new CompositeSubscription();
public SidebarMainPresenter(String hostname, RoomRepository roomRepository,
UserRepository userRepository, MethodCallHelper methodCallHelper) {
this.hostname = hostname;
this.roomRepository = roomRepository;
this.userRepository = userRepository;
this.methodCallHelper = methodCallHelper;
}
@Override
public void bindView(@NonNull SidebarMainContract.View view) {
this.view = view;
if (TextUtils.isEmpty(hostname)) {
view.showEmptyScreen();
return;
}
view.showScreen();
subscribeToRooms();
subscribeToUser();
}
@Override
public void release() {
compositeSubscription.unsubscribe();
view = null;
}
@Override
public void onUserOnline() {
updateCurrentUserStatus(User.STATUS_ONLINE);
}
@Override
public void onUserAway() {
updateCurrentUserStatus(User.STATUS_AWAY);
}
@Override
public void onUserBusy() {
updateCurrentUserStatus(User.STATUS_BUSY);
}
@Override
public void onUserOffline() {
updateCurrentUserStatus(User.STATUS_OFFLINE);
}
@Override
public void onLogout() {
if (methodCallHelper != null) {
methodCallHelper.logout().continueWith(new LogcatIfError());
}
}
private void subscribeToRooms() {
final Subscription subscription = roomRepository.getOpenRooms()
.distinctUntilChanged()
.subscribe(
rooms -> view.showRoomList(rooms)
);
compositeSubscription.add(subscription);
}
private void subscribeToUser() {
final Subscription subscription = userRepository.getCurrentUser()
.distinctUntilChanged()
.subscribe(user -> view.showUser(user));
compositeSubscription.add(subscription);
}
private void updateCurrentUserStatus(String status) {
if (methodCallHelper != null) {
methodCallHelper.setUserStatus(status).continueWith(new LogcatIfError());
}
}
}
...@@ -12,8 +12,8 @@ import com.trello.rxlifecycle.components.support.RxAppCompatDialogFragment; ...@@ -12,8 +12,8 @@ import com.trello.rxlifecycle.components.support.RxAppCompatDialogFragment;
import bolts.Task; import bolts.Task;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFragment { public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFragment {
......
...@@ -12,11 +12,11 @@ import bolts.Task; ...@@ -12,11 +12,11 @@ import bolts.Task;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter; import chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmAutoCompleteAdapter; import chat.rocket.persistence.realm.RealmAutoCompleteAdapter;
/** /**
* add Direct Message. * add Direct RealmMessage.
*/ */
public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragment { public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragment {
public static AddDirectMessageDialogFragment create(String hostname) { public static AddDirectMessageDialogFragment create(String hostname) {
...@@ -39,10 +39,10 @@ public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragmen ...@@ -39,10 +39,10 @@ public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragmen
AutoCompleteTextView autoCompleteTextView = AutoCompleteTextView autoCompleteTextView =
(AutoCompleteTextView) getDialog().findViewById(R.id.editor_username); (AutoCompleteTextView) getDialog().findViewById(R.id.editor_username);
RealmAutoCompleteAdapter<User> adapter = realmHelper.createAutoCompleteAdapter(getContext(), RealmAutoCompleteAdapter<RealmUser> adapter = realmHelper.createAutoCompleteAdapter(getContext(),
(realm, text) -> realm.where(User.class) (realm, text) -> realm.where(RealmUser.class)
.contains(User.USERNAME, text, Case.INSENSITIVE) .contains(RealmUser.USERNAME, text, Case.INSENSITIVE)
.findAllSorted(User.USERNAME), .findAllSorted(RealmUser.USERNAME),
context -> new SuggestUserAdapter(context, hostname)); context -> new SuggestUserAdapter(context, hostname));
autoCompleteTextView.setAdapter(adapter); autoCompleteTextView.setAdapter(adapter);
......
...@@ -17,7 +17,7 @@ import chat.rocket.android.log.RCLog; ...@@ -17,7 +17,7 @@ import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.PublicSetting; import chat.rocket.android.model.ddp.PublicSetting;
import chat.rocket.android.model.internal.FileUploading; import chat.rocket.android.model.internal.FileUploading;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
/** /**
* utility class for uploading file. * utility class for uploading file.
......
...@@ -5,8 +5,8 @@ import android.support.annotation.LayoutRes; ...@@ -5,8 +5,8 @@ import android.support.annotation.LayoutRes;
import android.support.v7.util.ListUpdateCallback; import android.support.v7.util.ListUpdateCallback;
import io.realm.RealmObject; import io.realm.RealmObject;
import chat.rocket.android.realm_helper.RealmModelListAdapter; import chat.rocket.persistence.realm.RealmModelListAdapter;
import chat.rocket.android.realm_helper.RealmModelViewHolder; import chat.rocket.persistence.realm.RealmModelViewHolder;
@SuppressWarnings({"PMD.AbstractNaming", "PMD.GenericsNaming"}) @SuppressWarnings({"PMD.AbstractNaming", "PMD.GenericsNaming"})
/** /**
......
...@@ -8,7 +8,7 @@ import chat.rocket.android.R; ...@@ -8,7 +8,7 @@ import chat.rocket.android.R;
import chat.rocket.android.helper.DateTime; import chat.rocket.android.helper.DateTime;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.realm_helper.RealmModelViewHolder; import chat.rocket.persistence.realm.RealmModelViewHolder;
import chat.rocket.android.widget.RocketChatAvatar; import chat.rocket.android.widget.RocketChatAvatar;
public abstract class AbstractMessageViewHolder extends RealmModelViewHolder<PairedMessage> { public abstract class AbstractMessageViewHolder extends RealmModelViewHolder<PairedMessage> {
......
...@@ -10,13 +10,13 @@ import java.util.List; ...@@ -10,13 +10,13 @@ import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.layouthelper.ExtRealmModelListAdapter; import chat.rocket.android.layouthelper.ExtRealmModelListAdapter;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
/** /**
* target list adapter for chat room. * target list adapter for chat room.
*/ */
public class MessageListAdapter public class MessageListAdapter
extends ExtRealmModelListAdapter<Message, PairedMessage, AbstractMessageViewHolder> { extends ExtRealmModelListAdapter<RealmMessage, PairedMessage, AbstractMessageViewHolder> {
private static final int VIEW_TYPE_UNKNOWN = 0; private static final int VIEW_TYPE_UNKNOWN = 0;
private static final int VIEW_TYPE_NORMAL_MESSAGE = 1; private static final int VIEW_TYPE_NORMAL_MESSAGE = 1;
...@@ -99,7 +99,7 @@ public class MessageListAdapter ...@@ -99,7 +99,7 @@ public class MessageListAdapter
} }
@Override @Override
protected List<PairedMessage> mapResultsToViewModel(List<Message> results) { protected List<PairedMessage> mapResultsToViewModel(List<RealmMessage> results) {
if (results.isEmpty()) { if (results.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.layouthelper.chatroom; ...@@ -3,7 +3,7 @@ package chat.rocket.android.layouthelper.chatroom;
import android.content.Context; import android.content.Context;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
/** /**
* message type. * message type.
...@@ -11,46 +11,46 @@ import chat.rocket.android.model.ddp.Message; ...@@ -11,46 +11,46 @@ import chat.rocket.android.model.ddp.Message;
public enum MessageType { public enum MessageType {
ROOM_NAME_CHANGED("r") { ROOM_NAME_CHANGED("r") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_room_name_changed, return context.getString(R.string.message_room_name_changed,
message.getMessage(), getUsername(message)); message.getMessage(), getUsername(message));
} }
}, },
USER_ADDED("au") { USER_ADDED("au") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_user_added_by, return context.getString(R.string.message_user_added_by,
message.getMessage(), getUsername(message)); message.getMessage(), getUsername(message));
} }
}, },
USER_REMOVED("ru") { USER_REMOVED("ru") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_user_removed_by, return context.getString(R.string.message_user_removed_by,
message.getMessage(), getUsername(message)); message.getMessage(), getUsername(message));
} }
}, },
USER_JOINED("uj") { USER_JOINED("uj") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_user_joined_channel); return context.getString(R.string.message_user_joined_channel);
} }
}, },
USER_LEFT("ul") { USER_LEFT("ul") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_user_left); return context.getString(R.string.message_user_left);
} }
}, },
WELCOME("wm") { WELCOME("wm") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_welcome, getUsername(message)); return context.getString(R.string.message_welcome, getUsername(message));
} }
}, },
MESSAGE_REMOVED("rm") { MESSAGE_REMOVED("rm") {
@Override @Override
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return context.getString(R.string.message_removed); return context.getString(R.string.message_removed);
} }
}, },
...@@ -74,11 +74,11 @@ public enum MessageType { ...@@ -74,11 +74,11 @@ public enum MessageType {
return UNSPECIFIED; return UNSPECIFIED;
} }
public String getString(Context context, Message message) { public String getString(Context context, RealmMessage message) {
return ""; return "";
} }
private static String getUsername(Message message) { private static String getUsername(RealmMessage message) {
if (message != null && message.getUser() != null) { if (message != null && message.getUser() != null) {
return message.getUser().getUsername(); return message.getUser().getUsername();
} else { } else {
......
package chat.rocket.android.layouthelper.chatroom; package chat.rocket.android.layouthelper.chatroom;
import chat.rocket.android.helper.DateTime; import chat.rocket.android.helper.DateTime;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
/** /**
* ViewData Model for messages in chatroom. * ViewData Model for messages in chatroom.
*/ */
public class PairedMessage { public class PairedMessage {
public final Message target; public final RealmMessage target;
final Message nextSibling; final RealmMessage nextSibling;
public PairedMessage(Message target, Message nextSibling) { public PairedMessage(RealmMessage target, RealmMessage nextSibling) {
this.target = target; this.target = target;
this.nextSibling = nextSibling; this.nextSibling = nextSibling;
} }
......
...@@ -4,7 +4,7 @@ import android.view.View; ...@@ -4,7 +4,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.core.Room;
import chat.rocket.android.widget.internal.RoomListItemView; import chat.rocket.android.widget.internal.RoomListItemView;
import java.util.List; import java.util.List;
...@@ -19,7 +19,7 @@ public class RoomListManager { ...@@ -19,7 +19,7 @@ public class RoomListManager {
private boolean unreadRoomMode = false; private boolean unreadRoomMode = false;
private List<RoomSubscription> roomSubscriptionList; private List<Room> roomList;
/** /**
* Callback interface for List item clicked. * Callback interface for List item clicked.
...@@ -54,8 +54,8 @@ public class RoomListManager { ...@@ -54,8 +54,8 @@ public class RoomListManager {
/** /**
* update ViewGroups with room list. * update ViewGroups with room list.
*/ */
public void setRooms(List<RoomSubscription> roomSubscriptionList) { public void setRooms(List<Room> roomList) {
this.roomSubscriptionList = roomSubscriptionList; this.roomList = roomList;
updateRoomsList(); updateRoomsList();
} }
...@@ -66,14 +66,14 @@ public class RoomListManager { ...@@ -66,14 +66,14 @@ public class RoomListManager {
this.listener = listener; this.listener = listener;
} }
private void removeDeletedItem(ViewGroup parent, List<RoomSubscription> roomSubscriptionList) { private void removeDeletedItem(ViewGroup parent, List<Room> roomList) {
for (int index = parent.getChildCount() - 1; index >= 0; index--) { for (int index = parent.getChildCount() - 1; index >= 0; index--) {
RoomListItemView roomListItemView = (RoomListItemView) parent.getChildAt(index); RoomListItemView roomListItemView = (RoomListItemView) parent.getChildAt(index);
final String targetRoomName = roomListItemView.getRoomName(); final String targetRoomName = roomListItemView.getRoomName();
if (!TextUtils.isEmpty(targetRoomName)) { if (!TextUtils.isEmpty(targetRoomName)) {
boolean found = false; boolean found = false;
for (RoomSubscription roomSubscription : roomSubscriptionList) { for (Room room : roomList) {
if (targetRoomName.equals(roomSubscription.getName())) { if (targetRoomName.equals(room.getName())) {
found = true; found = true;
break; break;
} }
...@@ -90,15 +90,15 @@ public class RoomListManager { ...@@ -90,15 +90,15 @@ public class RoomListManager {
updateRoomsList(); updateRoomsList();
} }
private void insertOrUpdateItem(ViewGroup parent, RoomSubscription roomSubscription) { private void insertOrUpdateItem(ViewGroup parent, Room room) {
final String roomName = roomSubscription.getName(); final String roomName = room.getName();
int index; int index;
for (index = 0; index < parent.getChildCount(); index++) { for (index = 0; index < parent.getChildCount(); index++) {
RoomListItemView roomListItemView = (RoomListItemView) parent.getChildAt(index); RoomListItemView roomListItemView = (RoomListItemView) parent.getChildAt(index);
final String targetRoomName = roomListItemView.getRoomName(); final String targetRoomName = roomListItemView.getRoomName();
if (roomName.equals(targetRoomName)) { if (roomName.equals(targetRoomName)) {
updateRoomItemView(roomListItemView, roomSubscription); updateRoomItemView(roomListItemView, room);
return; return;
} }
if (roomName.compareToIgnoreCase(targetRoomName) < 0) { if (roomName.compareToIgnoreCase(targetRoomName) < 0) {
...@@ -107,7 +107,7 @@ public class RoomListManager { ...@@ -107,7 +107,7 @@ public class RoomListManager {
} }
RoomListItemView roomListItemView = new RoomListItemView(parent.getContext()); RoomListItemView roomListItemView = new RoomListItemView(parent.getContext());
updateRoomItemView(roomListItemView, roomSubscription); updateRoomItemView(roomListItemView, room);
if (index == parent.getChildCount()) { if (index == parent.getChildCount()) {
parent.addView(roomListItemView); parent.addView(roomListItemView);
} else { } else {
...@@ -116,13 +116,13 @@ public class RoomListManager { ...@@ -116,13 +116,13 @@ public class RoomListManager {
} }
private void updateRoomItemView(RoomListItemView roomListItemView, private void updateRoomItemView(RoomListItemView roomListItemView,
RoomSubscription roomSubscription) { Room room) {
roomListItemView roomListItemView
.setRoomId(roomSubscription.getRoomId()) .setRoomId(room.getRoomId())
.setRoomName(roomSubscription.getName()) .setRoomName(room.getName())
.setRoomType(roomSubscription.getType()) .setRoomType(room.getType())
.setAlert(roomSubscription.isAlert()) .setAlert(room.isAlert())
.setUnreadCount(roomSubscription.getUnread()); .setUnreadCount(room.getUnread());
roomListItemView.setOnClickListener(this::onItemClick); roomListItemView.setOnClickListener(this::onItemClick);
} }
...@@ -134,31 +134,35 @@ public class RoomListManager { ...@@ -134,31 +134,35 @@ public class RoomListManager {
} }
private void updateRoomsList() { private void updateRoomsList() {
removeDeletedItem(unreadRoomsContainer, roomSubscriptionList); if (roomList == null) {
removeDeletedItem(channelsContainer, roomSubscriptionList); return;
removeDeletedItem(dmContainer, roomSubscriptionList); }
removeDeletedItem(unreadRoomsContainer, roomList);
removeDeletedItem(channelsContainer, roomList);
removeDeletedItem(dmContainer, roomList);
for (RoomSubscription roomSubscription : roomSubscriptionList) { for (Room room : roomList) {
String name = roomSubscription.getName(); String name = room.getName();
if (TextUtils.isEmpty(name)) { if (TextUtils.isEmpty(name)) {
continue; continue;
} }
String type = roomSubscription.getType(); String type = room.getType();
if (unreadRoomMode && roomSubscription.isAlert()) { if (unreadRoomMode && room.isAlert()) {
insertOrUpdateItem(unreadRoomsContainer, roomSubscription); insertOrUpdateItem(unreadRoomsContainer, room);
removeItemIfExists(channelsContainer, name); removeItemIfExists(channelsContainer, name);
removeItemIfExists(dmContainer, name); removeItemIfExists(dmContainer, name);
} else if (RoomSubscription.TYPE_CHANNEL.equals(type) } else if (Room.TYPE_CHANNEL.equals(type)
|| RoomSubscription.TYPE_PRIVATE.equals(type)) { || Room.TYPE_PRIVATE.equals(type)) {
removeItemIfExists(unreadRoomsContainer, name); removeItemIfExists(unreadRoomsContainer, name);
insertOrUpdateItem(channelsContainer, roomSubscription); insertOrUpdateItem(channelsContainer, room);
removeItemIfExists(dmContainer, name); removeItemIfExists(dmContainer, name);
} else if (RoomSubscription.TYPE_DIRECT_MESSAGE.equals(type)) { } else if (Room.TYPE_DIRECT_MESSAGE.equals(type)) {
removeItemIfExists(unreadRoomsContainer, name); removeItemIfExists(unreadRoomsContainer, name);
removeItemIfExists(channelsContainer, name); removeItemIfExists(channelsContainer, name);
insertOrUpdateItem(dmContainer, roomSubscription); insertOrUpdateItem(dmContainer, room);
} }
} }
......
...@@ -9,8 +9,8 @@ import android.view.ViewGroup; ...@@ -9,8 +9,8 @@ import android.view.ViewGroup;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.renderer.UserRenderer; import chat.rocket.android.renderer.UserRenderer;
/** /**
...@@ -47,16 +47,16 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> { ...@@ -47,16 +47,16 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
return; return;
} }
User user = realmHelper.executeTransactionForRead(realm -> RealmUser user = realmHelper.executeTransactionForRead(realm ->
realm.where(User.class).equalTo(User.USERNAME, username).findFirst()); realm.where(RealmUser.class).equalTo(RealmUser.USERNAME, username).findFirst());
if (user == null) { if (user == null) {
user = new User(); user = new RealmUser();
user.setUsername(username); user.setUsername(username);
new UserRenderer(context, user) new UserRenderer(context, user.asUser())
.avatarInto(holder.avatar, hostname) .avatarInto(holder.avatar, hostname)
.usernameInto(holder.username); .usernameInto(holder.username);
} else { } else {
new UserRenderer(context, user) new UserRenderer(context, user.asUser())
.statusColorInto(holder.status) .statusColorInto(holder.status)
.avatarInto(holder.avatar, hostname) .avatarInto(holder.avatar, hostname)
.usernameInto(holder.username); .usernameInto(holder.username);
......
...@@ -7,15 +7,15 @@ import android.widget.ImageView; ...@@ -7,15 +7,15 @@ import android.widget.ImageView;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmAutoCompleteAdapter; import chat.rocket.persistence.realm.RealmAutoCompleteAdapter;
import chat.rocket.android.renderer.UserRenderer; import chat.rocket.android.renderer.UserRenderer;
import chat.rocket.android.widget.RocketChatAvatar; import chat.rocket.android.widget.RocketChatAvatar;
/** /**
* adapter to suggest user names. * adapter to suggest user names.
*/ */
public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> { public class SuggestUserAdapter extends RealmAutoCompleteAdapter<RealmUser> {
private final String hostname; private final String hostname;
public SuggestUserAdapter(Context context, String hostname) { public SuggestUserAdapter(Context context, String hostname) {
...@@ -24,18 +24,18 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> { ...@@ -24,18 +24,18 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
} }
@Override @Override
protected void onBindItemView(View itemView, User user) { protected void onBindItemView(View itemView, RealmUser user) {
new UserRenderer(itemView.getContext(), user) new UserRenderer(itemView.getContext(), user.asUser())
.statusColorInto((ImageView) itemView.findViewById(R.id.room_user_status)) .statusColorInto((ImageView) itemView.findViewById(R.id.room_user_status))
.avatarInto((RocketChatAvatar) itemView.findViewById(R.id.room_user_avatar), hostname); .avatarInto((RocketChatAvatar) itemView.findViewById(R.id.room_user_avatar), hostname);
} }
@Override @Override
protected void filterList(List<User> users, String text) { protected void filterList(List<RealmUser> users, String text) {
Iterator<User> itUsers = users.iterator(); Iterator<RealmUser> itUsers = users.iterator();
final String prefix = text.toLowerCase(); final String prefix = text.toLowerCase();
while (itUsers.hasNext()) { while (itUsers.hasNext()) {
User user = itUsers.next(); RealmUser user = itUsers.next();
if (!user.getUsername().toLowerCase().startsWith(prefix)) { if (!user.getUsername().toLowerCase().startsWith(prefix)) {
itUsers.remove(); itUsers.remove();
} }
...@@ -43,7 +43,7 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> { ...@@ -43,7 +43,7 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
} }
@Override @Override
protected String getStringForSelectedItem(User user) { protected String getStringForSelectedItem(RealmUser user) {
return user.getUsername(); return user.getUsername();
} }
} }
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
import android.support.annotation.Nullable;
import java.util.List;
@AutoValue
public abstract class Attachment {
@Nullable
public abstract String getColor();
@Nullable
public abstract String getText();
@Nullable
public abstract String getTimestamp();
@Nullable
public abstract String getThumbUrl();
@Nullable
public abstract String getMessageLink();
public abstract boolean isCollapsed();
@Nullable
public abstract AttachmentAuthor getAttachmentAuthor();
@Nullable
public abstract AttachmentTitle getAttachmentTitle();
@Nullable
public abstract String getImageUrl();
@Nullable
public abstract String getAudioUrl();
@Nullable
public abstract String getVideoUrl();
@Nullable
public abstract List<AttachmentField> getAttachmentFields();
public static Builder builder() {
return new AutoValue_Attachment.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setColor(String color);
public abstract Builder setText(String text);
public abstract Builder setTimestamp(String timestamp);
public abstract Builder setThumbUrl(String thumbUrl);
public abstract Builder setMessageLink(String messageLink);
public abstract Builder setCollapsed(boolean collapsed);
public abstract Builder setAttachmentAuthor(AttachmentAuthor attachmentAuthor);
public abstract Builder setAttachmentTitle(AttachmentTitle attachmentTitle);
public abstract Builder setImageUrl(String imageUrl);
public abstract Builder setAudioUrl(String audioUrl);
public abstract Builder setVideoUrl(String videoUrl);
public abstract Builder setAttachmentFields(List<AttachmentField> attachmentFields);
public abstract Attachment build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AttachmentAuthor {
public abstract String getName();
public abstract String getLink();
public abstract String getIconUrl();
public static Builder builder() {
return new AutoValue_AttachmentAuthor.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setName(String name);
public abstract Builder setLink(String link);
public abstract Builder setIconUrl(String iconUrl);
public abstract AttachmentAuthor build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AttachmentField {
public abstract boolean isShort();
public abstract String getTitle();
public abstract String getText();
public static Builder builder() {
return new AutoValue_AttachmentField.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setShort(boolean isShort);
public abstract Builder setTitle(String link);
public abstract Builder setText(String text);
public abstract AttachmentField build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
import android.support.annotation.Nullable;
@AutoValue
public abstract class AttachmentTitle {
public abstract String getTitle();
@Nullable
public abstract String getLink();
@Nullable
public abstract String getDownloadLink();
public static Builder builder() {
return new AutoValue_AttachmentTitle.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setTitle(String title);
public abstract Builder setLink(String link);
public abstract Builder setDownloadLink(String downloadLink);
public abstract AttachmentTitle build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Email {
public abstract String getAddress();
public abstract boolean isVerified();
public static Builder builder() {
return new AutoValue_Email.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setAddress(String address);
public abstract Builder setVerified(boolean verified);
public abstract Email build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
import android.support.annotation.Nullable;
import java.util.List;
@AutoValue
public abstract class Message {
public abstract String getId();
@Nullable
public abstract String getType();
public abstract String getRoomId();
public abstract int getSyncState();
public abstract long getTimestamp();
public abstract String getMessage();
public abstract User getUser();
public abstract boolean isGroupable();
@Nullable
public abstract List<Attachment> getAttachments();
@Nullable
public abstract List<WebContent> getWebContents();
@Nullable
public abstract String getAlias();
@Nullable
public abstract String getAvatar();
public static Builder builder() {
return new AutoValue_Message.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setId(String id);
public abstract Builder setType(String type);
public abstract Builder setRoomId(String roomId);
public abstract Builder setSyncState(int syncState);
public abstract Builder setTimestamp(long timestamp);
public abstract Builder setMessage(String msg);
public abstract Builder setUser(User user);
public abstract Builder setGroupable(boolean groupable);
public abstract Builder setAttachments(List<Attachment> attachments);
public abstract Builder setWebContents(List<WebContent> webContents);
public abstract Builder setAlias(String alias);
public abstract Builder setAvatar(String avatar);
public abstract Message build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Preferences {
public abstract String getId();
public abstract boolean isNewRoomNotification();
public abstract boolean isNewMessageNotification();
public abstract boolean isUseEmojis();
public abstract boolean isConvertAsciiEmoji();
public abstract boolean isSaveMobileBandwidth();
public abstract boolean isCollapseMediaByDefault();
public abstract boolean isUnreadRoomsMode();
public abstract boolean isAutoImageLoad();
public abstract String getEmailNotificationMode();
public abstract boolean isUnreadAlert();
public abstract int getDesktopNotificationDuration();
public abstract int getViewMode();
public abstract boolean isHideUsernames();
public abstract boolean isHideAvatars();
public abstract boolean isHideFlexTab();
public static Builder builder() {
return new AutoValue_Preferences.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setId(String id);
public abstract Builder setNewRoomNotification(boolean newRoomNotification);
public abstract Builder setNewMessageNotification(boolean newMessageNotification);
public abstract Builder setUseEmojis(boolean useEmojis);
public abstract Builder setConvertAsciiEmoji(boolean convertAsciiEmoji);
public abstract Builder setSaveMobileBandwidth(boolean saveMobileBandwidth);
public abstract Builder setCollapseMediaByDefault(boolean collapseMediaByDefault);
public abstract Builder setUnreadRoomsMode(boolean unreadRoomsMode);
public abstract Builder setAutoImageLoad(boolean autoImageLoad);
public abstract Builder setEmailNotificationMode(String emailNotificationMode);
public abstract Builder setUnreadAlert(boolean unreadAlert);
public abstract Builder setDesktopNotificationDuration(int desktopNotificationDuration);
public abstract Builder setViewMode(int viewMode);
public abstract Builder setHideUsernames(boolean hideUsernames);
public abstract Builder setHideAvatars(boolean hideAvatars);
public abstract Builder setHideFlexTab(boolean hideFlexTab);
public abstract Preferences build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Room {
public static final String TYPE_CHANNEL = "c";
public static final String TYPE_PRIVATE = "p";
public static final String TYPE_DIRECT_MESSAGE = "d";
public abstract String getId();
public abstract String getRoomId();
public abstract String getName();
public abstract String getType();
public abstract boolean isOpen();
public abstract boolean isAlert();
public abstract int getUnread();
public abstract long getUpdatedAt();
public abstract long getLastSeen();
public static Builder builder() {
return new AutoValue_Room.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setId(String id);
public abstract Builder setRoomId(String roomId);
public abstract Builder setName(String name);
public abstract Builder setType(String type);
public abstract Builder setOpen(boolean open);
public abstract Builder setAlert(boolean alert);
public abstract Builder setUnread(int unread);
public abstract Builder setUpdatedAt(long updatedAt);
public abstract Builder setLastSeen(long lastSeen);
public abstract Room build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Settings {
public abstract String getId();
public abstract Preferences getPreferences();
public static Builder builder() {
return new AutoValue_Settings.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setId(String id);
public abstract Builder setPreferences(Preferences preferences);
public abstract Settings build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
import android.support.annotation.Nullable;
import java.util.List;
@AutoValue
public abstract class User {
public static final String STATUS_ONLINE = "online";
public static final String STATUS_BUSY = "busy";
public static final String STATUS_AWAY = "away";
public static final String STATUS_OFFLINE = "offline";
public abstract String getId();
public abstract String getUsername();
@Nullable
public abstract String getStatus();
public abstract double getUtcOffset();
@Nullable
public abstract List<Email> getEmails();
@Nullable
public abstract Settings getSettings();
public static Builder builder() {
return new AutoValue_User.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setId(String id);
public abstract Builder setUsername(String username);
public abstract Builder setStatus(String status);
public abstract Builder setUtcOffset(double utcOffset);
public abstract Builder setEmails(List<Email> emails);
public abstract Builder setSettings(Settings settings);
public abstract User build();
}
}
package chat.rocket.android.model.core;
import com.google.auto.value.AutoValue;
import android.support.annotation.Nullable;
@AutoValue
public abstract class WebContent {
public abstract String getUrl();
@Nullable
public abstract String getMeta();
@Nullable
public abstract String getHeaders();
public static Builder builder() {
return new AutoValue_WebContent.Builder();
}
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setUrl(String url);
public abstract Builder setMeta(String meta);
public abstract Builder setHeaders(String headers);
public abstract WebContent build();
}
}
...@@ -7,7 +7,7 @@ import org.json.JSONException; ...@@ -7,7 +7,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.JsonConstants; import chat.rocket.android.model.JsonConstants;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
/** /**
* public setting model. * public setting model.
......
...@@ -3,13 +3,22 @@ package chat.rocket.android.model.ddp; ...@@ -3,13 +3,22 @@ package chat.rocket.android.model.ddp;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.android.model.core.Email;
/** /**
* Login-User's email. * Login-RealmUser's email.
*/ */
public class Email extends RealmObject { public class RealmEmail extends RealmObject {
@PrimaryKey private String address; @PrimaryKey private String address;
private boolean verified; private boolean verified;
public Email asEmail() {
return Email.builder()
.setAddress(address)
.setVerified(verified)
.build();
}
@SuppressWarnings({"PMD.ShortVariable"}) @SuppressWarnings({"PMD.ShortVariable"})
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
...@@ -20,7 +29,7 @@ public class Email extends RealmObject { ...@@ -20,7 +29,7 @@ public class Email extends RealmObject {
return false; return false;
} }
Email email = (Email) o; RealmEmail email = (RealmEmail) o;
if (verified != email.verified) { if (verified != email.verified) {
return false; return false;
......
...@@ -2,18 +2,27 @@ package chat.rocket.android.model.ddp; ...@@ -2,18 +2,27 @@ package chat.rocket.android.model.ddp;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import chat.rocket.android.model.JsonConstants; import chat.rocket.android.model.JsonConstants;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.core.Attachment;
import chat.rocket.android.model.core.AttachmentAuthor;
import chat.rocket.android.model.core.AttachmentField;
import chat.rocket.android.model.core.AttachmentTitle;
import chat.rocket.android.model.core.Message;
import chat.rocket.android.model.core.WebContent;
/** /**
* Message. * RealmMessage.
*/ */
@SuppressWarnings({"PMD.ShortClassName", "PMD.ShortVariable", @SuppressWarnings({"PMD.ShortClassName", "PMD.ShortVariable",
"PMD.MethodNamingConventions", "PMD.VariableNamingConventions"}) "PMD.MethodNamingConventions", "PMD.VariableNamingConventions"})
public class Message extends RealmObject { public class RealmMessage extends RealmObject {
//ref: Rocket.Chat:packages/rocketchat-lib/lib/MessageTypes.coffee //ref: Rocket.Chat:packages/rocketchat-lib/lib/MessageTypes.coffee
public static final String ID = "_id"; public static final String ID = "_id";
...@@ -36,7 +45,7 @@ public class Message extends RealmObject { ...@@ -36,7 +45,7 @@ public class Message extends RealmObject {
private int syncstate; private int syncstate;
private long ts; private long ts;
private String msg; private String msg;
private User u; private RealmUser u;
private boolean groupable; private boolean groupable;
private String alias; private String alias;
private String avatar; private String avatar;
...@@ -103,11 +112,11 @@ public class Message extends RealmObject { ...@@ -103,11 +112,11 @@ public class Message extends RealmObject {
this.msg = msg; this.msg = msg;
} }
public User getUser() { public RealmUser getUser() {
return u; return u;
} }
public void setUser(User u) { public void setUser(RealmUser u) {
this.u = u; this.u = u;
} }
...@@ -151,9 +160,141 @@ public class Message extends RealmObject { ...@@ -151,9 +160,141 @@ public class Message extends RealmObject {
this.avatar = avatar; this.avatar = avatar;
} }
public Message asMessage() {
return Message.builder()
.setId(_id)
.setType(t)
.setRoomId(rid)
.setSyncState(syncstate)
.setTimestamp(ts)
.setMessage(msg)
.setUser(u.asUser())
.setGroupable(groupable)
.setAlias(alias)
.setAvatar(avatar)
.setAttachments(getCoreAttachments())
.setWebContents(getWebContents())
.build();
}
private List<Attachment> getCoreAttachments() {
if (attachments == null || attachments.length() == 0) {
return null;
}
final List<Attachment> coreAttachments = new ArrayList<>();
try {
final JSONArray jsonArray = new JSONArray(urls);
for (int i = 0, size = jsonArray.length(); i < size; i++) {
final Attachment coreAttachment = getCoreAttachment(jsonArray.getJSONObject(i));
if (coreAttachment != null) {
coreAttachments.add(coreAttachment);
}
}
} catch (JSONException ignored) {
}
return coreAttachments;
}
private Attachment getCoreAttachment(JSONObject jsonCoreAttachment) {
return Attachment.builder()
.setColor(jsonCoreAttachment.optString("color", null))
.setText(jsonCoreAttachment.optString("text", null))
.setTimestamp(jsonCoreAttachment.optString("ts", null))
.setThumbUrl(jsonCoreAttachment.optString("thumb_url", null))
.setMessageLink(jsonCoreAttachment.optString("message_link", null))
.setCollapsed(jsonCoreAttachment.optBoolean("collapsed"))
.setImageUrl(jsonCoreAttachment.optString("image_url", null))
.setAudioUrl(jsonCoreAttachment.optString("audio_url", null))
.setVideoUrl(jsonCoreAttachment.optString("video_url", null))
.setAttachmentAuthor(getAttachmentAuthor(jsonCoreAttachment))
.setAttachmentTitle(getAttachmentTitle(jsonCoreAttachment))
.setAttachmentFields(getAttachmentFields(jsonCoreAttachment))
.build();
}
private AttachmentAuthor getAttachmentAuthor(JSONObject jsonCoreAttachment) {
if (jsonCoreAttachment.isNull("author_name") || jsonCoreAttachment.isNull("author_link")
|| jsonCoreAttachment.isNull("author_icon")) {
return null;
}
return AttachmentAuthor.builder()
.setName(jsonCoreAttachment.optString("author_name"))
.setLink(jsonCoreAttachment.optString("author_link"))
.setIconUrl(jsonCoreAttachment.optString("author_icon"))
.build();
}
private AttachmentTitle getAttachmentTitle(JSONObject jsonCoreAttachment) {
if (jsonCoreAttachment.isNull("title")) {
return null;
}
return AttachmentTitle.builder()
.setTitle(jsonCoreAttachment.optString("title"))
.setLink(jsonCoreAttachment.optString("title_link", null))
.setDownloadLink(jsonCoreAttachment.optString("title_link_download", null))
.build();
}
private List<AttachmentField> getAttachmentFields(JSONObject jsonCoreAttachment) {
final JSONArray jsonFields = jsonCoreAttachment.optJSONArray("fields");
if (jsonFields == null) {
return null;
}
final List<AttachmentField> attachmentFields = new ArrayList<>();
for (int i = 0, size = jsonFields.length(); i < size; i++) {
final JSONObject fieldObject = jsonFields.optJSONObject(i);
if (fieldObject == null || fieldObject.isNull("title") || fieldObject.isNull("value")) {
continue;
}
attachmentFields.add(AttachmentField.builder()
.setShort(fieldObject.optBoolean("short"))
.setTitle(fieldObject.optString("title"))
.setText(fieldObject.optString("value"))
.build());
}
return attachmentFields;
}
private List<WebContent> getWebContents() {
if (urls == null || urls.length() == 0) {
return null;
}
final List<WebContent> webContents = new ArrayList<>();
try {
final JSONArray jsonArray = new JSONArray(urls);
for (int i = 0, size = jsonArray.length(); i < size; i++) {
final WebContent webContent = getWebContent(jsonArray.getJSONObject(i));
if (webContent != null) {
webContents.add(webContent);
}
}
} catch (JSONException ignored) {
}
return webContents;
}
private WebContent getWebContent(JSONObject jsonWebContent) {
return WebContent.builder()
.setUrl(jsonWebContent.optString("url"))
.setMeta(jsonWebContent.optString("meta", null))
.setHeaders(jsonWebContent.optString("headers", null))
.build();
}
@Override @Override
public String toString() { public String toString() {
return "Message{" + return "RealmMessage{" +
"_id='" + _id + '\'' + "_id='" + _id + '\'' +
", t='" + t + '\'' + ", t='" + t + '\'' +
", rid='" + rid + '\'' + ", rid='" + rid + '\'' +
...@@ -178,7 +319,7 @@ public class Message extends RealmObject { ...@@ -178,7 +319,7 @@ public class Message extends RealmObject {
return false; return false;
} }
Message message = (Message) o; RealmMessage message = (RealmMessage) o;
if (syncstate != message.syncstate) { if (syncstate != message.syncstate) {
return false; return false;
......
...@@ -3,8 +3,10 @@ package chat.rocket.android.model.ddp; ...@@ -3,8 +3,10 @@ package chat.rocket.android.model.ddp;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.android.model.core.Preferences;
@SuppressWarnings({"PMD.ShortVariable"}) @SuppressWarnings({"PMD.ShortVariable"})
public class Preferences extends RealmObject { public class RealmPreferences extends RealmObject {
@PrimaryKey private String id; @PrimaryKey private String id;
...@@ -25,6 +27,27 @@ public class Preferences extends RealmObject { ...@@ -25,6 +27,27 @@ public class Preferences extends RealmObject {
private boolean hideFlexTab; private boolean hideFlexTab;
// private List<String> highlights; // Realm does not support this yet // private List<String> highlights; // Realm does not support this yet
public Preferences asPreferences() {
return Preferences.builder()
.setId(id)
.setNewRoomNotification(newRoomNotification)
.setNewMessageNotification(newMessageNotification)
.setUseEmojis(useEmojis)
.setConvertAsciiEmoji(convertAsciiEmoji)
.setSaveMobileBandwidth(saveMobileBandwidth)
.setCollapseMediaByDefault(collapseMediaByDefault)
.setUnreadRoomsMode(unreadRoomsMode)
.setAutoImageLoad(autoImageLoad)
.setEmailNotificationMode(emailNotificationMode)
.setUnreadAlert(unreadAlert)
.setDesktopNotificationDuration(desktopNotificationDuration)
.setViewMode(viewMode)
.setHideUsernames(hideUsernames)
.setHideAvatars(hideAvatars)
.setHideFlexTab(hideFlexTab)
.build();
}
public boolean isNewRoomNotification() { public boolean isNewRoomNotification() {
return newRoomNotification; return newRoomNotification;
} }
...@@ -94,7 +117,7 @@ public class Preferences extends RealmObject { ...@@ -94,7 +117,7 @@ public class Preferences extends RealmObject {
return false; return false;
} }
Preferences that = (Preferences) o; RealmPreferences that = (RealmPreferences) o;
if (newRoomNotification != that.newRoomNotification) { if (newRoomNotification != that.newRoomNotification) {
return false; return false;
......
...@@ -3,17 +3,26 @@ package chat.rocket.android.model.ddp; ...@@ -3,17 +3,26 @@ package chat.rocket.android.model.ddp;
import io.realm.RealmObject; import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import chat.rocket.android.model.core.Settings;
@SuppressWarnings({"PMD.ShortVariable"}) @SuppressWarnings({"PMD.ShortVariable"})
public class Settings extends RealmObject { public class RealmSettings extends RealmObject {
@PrimaryKey private String id; @PrimaryKey private String id;
private Preferences preferences; private RealmPreferences preferences;
public Preferences getPreferences() { public RealmPreferences getPreferences() {
return preferences; return preferences;
} }
public Settings asSettings() {
return Settings.builder()
.setId(id)
.setPreferences(preferences.asPreferences())
.build();
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {
...@@ -23,7 +32,7 @@ public class Settings extends RealmObject { ...@@ -23,7 +32,7 @@ public class Settings extends RealmObject {
return false; return false;
} }
Settings settings = (Settings) o; RealmSettings settings = (RealmSettings) o;
if (id != null ? !id.equals(settings.id) : settings.id != null) { if (id != null ? !id.equals(settings.id) : settings.id != null) {
return false; return false;
......
...@@ -6,12 +6,17 @@ import io.realm.RealmObject; ...@@ -6,12 +6,17 @@ import io.realm.RealmObject;
import io.realm.RealmQuery; import io.realm.RealmQuery;
import io.realm.annotations.PrimaryKey; import io.realm.annotations.PrimaryKey;
import java.util.ArrayList;
import java.util.List;
import chat.rocket.android.model.core.Email;
import chat.rocket.android.model.core.User;
/** /**
* User. * RealmUser.
*/ */
@SuppressWarnings({"PMD.ShortClassName", "PMD.ShortVariable", @SuppressWarnings({"PMD.ShortClassName", "PMD.ShortVariable",
"PMD.MethodNamingConventions", "PMD.VariableNamingConventions"}) "PMD.MethodNamingConventions", "PMD.VariableNamingConventions"})
public class User extends RealmObject { public class RealmUser extends RealmObject {
public static final String ID = "_id"; public static final String ID = "_id";
public static final String USERNAME = "username"; public static final String USERNAME = "username";
...@@ -29,11 +34,11 @@ public class User extends RealmObject { ...@@ -29,11 +34,11 @@ public class User extends RealmObject {
private String username; private String username;
private String status; private String status;
private double utcOffset; private double utcOffset;
private RealmList<Email> emails; private RealmList<RealmEmail> emails;
private Settings settings; private RealmSettings settings;
public static RealmQuery<User> queryCurrentUser(Realm realm) { public static RealmQuery<RealmUser> queryCurrentUser(Realm realm) {
return realm.where(User.class).isNotEmpty(EMAILS); return realm.where(RealmUser.class).isNotEmpty(EMAILS);
} }
public String getId() { public String getId() {
...@@ -68,21 +73,40 @@ public class User extends RealmObject { ...@@ -68,21 +73,40 @@ public class User extends RealmObject {
this.utcOffset = utcOffset; this.utcOffset = utcOffset;
} }
public RealmList<Email> getEmails() { public RealmList<RealmEmail> getEmails() {
return emails; return emails;
} }
public void setEmails(RealmList<Email> emails) { public void setEmails(RealmList<RealmEmail> emails) {
this.emails = emails; this.emails = emails;
} }
public Settings getSettings() { public RealmSettings getSettings() {
return settings; return settings;
} }
public User asUser() {
// convert email list
final int total = emails.size();
final List<Email> coreEmails = new ArrayList<>(total);
for (int i = 0; i < total; i++) {
coreEmails.add(emails.get(i).asEmail());
}
return User.builder()
.setId(_id)
.setUsername(username)
.setStatus(status)
.setUtcOffset(utcOffset)
.setEmails(coreEmails)
.setSettings(settings != null ? settings.asSettings() : null)
.build();
}
@Override @Override
public String toString() { public String toString() {
return "User{" + return "RealmUser{" +
"_id='" + _id + '\'' + "_id='" + _id + '\'' +
", username='" + username + '\'' + ", username='" + username + '\'' +
", status='" + status + '\'' + ", status='" + status + '\'' +
...@@ -101,7 +125,7 @@ public class User extends RealmObject { ...@@ -101,7 +125,7 @@ public class User extends RealmObject {
return false; return false;
} }
User user = (User) o; RealmUser user = (RealmUser) o;
if (Double.compare(user.utcOffset, utcOffset) != 0) { if (Double.compare(user.utcOffset, utcOffset) != 0) {
return false; return false;
......
...@@ -6,6 +6,7 @@ import org.json.JSONException; ...@@ -6,6 +6,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.JsonConstants; import chat.rocket.android.model.JsonConstants;
import chat.rocket.android.model.core.Room;
/** /**
* Chat Room(Subscription). * Chat Room(Subscription).
...@@ -31,7 +32,7 @@ public class RoomSubscription extends RealmObject { ...@@ -31,7 +32,7 @@ public class RoomSubscription extends RealmObject {
private String _id; //subscriptionId private String _id; //subscriptionId
@PrimaryKey private String rid; //roomId @PrimaryKey private String rid; //roomId
private String name; private String name;
//private User u; // REMARK: do not save u, because it is just me. //private RealmUser u; // REMARK: do not save u, because it is just me.
private String t; //type { c: channel, d: direct message, p: private } private String t; //type { c: channel, d: direct message, p: private }
private boolean open; private boolean open;
private boolean alert; private boolean alert;
...@@ -126,4 +127,18 @@ public class RoomSubscription extends RealmObject { ...@@ -126,4 +127,18 @@ public class RoomSubscription extends RealmObject {
public void setLastSeen(long ls) { public void setLastSeen(long ls) {
this.ls = ls; this.ls = ls;
} }
public Room asRoom() {
return Room.builder()
.setId(_id)
.setRoomId(rid)
.setName(name)
.setType(t)
.setOpen(open)
.setAlert(alert)
.setUnread(unread)
.setUpdatedAt(_updatedAt)
.setLastSeen(ls)
.build();
}
} }
...@@ -14,8 +14,8 @@ import chat.rocket.android.helper.LogcatIfError; ...@@ -14,8 +14,8 @@ import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmObjectObserver; import chat.rocket.persistence.realm.RealmObjectObserver;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
public class MethodCall extends RealmObject { public class MethodCall extends RealmObject {
......
...@@ -8,7 +8,7 @@ import org.json.JSONObject; ...@@ -8,7 +8,7 @@ import org.json.JSONObject;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
/** /**
......
...@@ -6,8 +6,8 @@ import java.util.List; ...@@ -6,8 +6,8 @@ import java.util.List;
import chat.rocket.android.helper.GcmPushSettingHelper; import chat.rocket.android.helper.GcmPushSettingHelper;
import chat.rocket.android.model.ddp.PublicSetting; import chat.rocket.android.model.ddp.PublicSetting;
import chat.rocket.android.model.internal.GcmPushRegistration; import chat.rocket.android.model.internal.GcmPushRegistration;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ConnectivityManager; import chat.rocket.android.service.ConnectivityManager;
import chat.rocket.android.service.ServerInfo; import chat.rocket.android.service.ServerInfo;
......
...@@ -10,23 +10,24 @@ import chat.rocket.android.helper.Avatar; ...@@ -10,23 +10,24 @@ import chat.rocket.android.helper.Avatar;
import chat.rocket.android.helper.DateTime; import chat.rocket.android.helper.DateTime;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.widget.RocketChatAvatar; import chat.rocket.android.widget.RocketChatAvatar;
import chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout; import chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout;
import chat.rocket.android.widget.message.RocketChatMessageLayout; import chat.rocket.android.widget.message.RocketChatMessageLayout;
import chat.rocket.android.widget.message.RocketChatMessageUrlsLayout; import chat.rocket.android.widget.message.RocketChatMessageUrlsLayout;
/** /**
* Renderer for Message model. * Renderer for RealmMessage model.
*/ */
public class MessageRenderer extends AbstractRenderer<Message> { public class MessageRenderer extends AbstractRenderer<RealmMessage> {
private final UserRenderer userRenderer; private final UserRenderer userRenderer;
public MessageRenderer(Context context, Message message) { public MessageRenderer(Context context, RealmMessage message) {
super(context, message); super(context, message);
userRenderer = new UserRenderer(context, message.getUser()); RealmUser realmUser = message.getUser();
userRenderer = new UserRenderer(context, realmUser == null ? null : realmUser.asUser());
} }
/** /**
...@@ -39,7 +40,7 @@ public class MessageRenderer extends AbstractRenderer<Message> { ...@@ -39,7 +40,7 @@ public class MessageRenderer extends AbstractRenderer<Message> {
} else if (TextUtils.isEmpty(object.getAvatar())) { } else if (TextUtils.isEmpty(object.getAvatar())) {
userRenderer.avatarInto(rocketChatAvatar, hostname); userRenderer.avatarInto(rocketChatAvatar, hostname);
} else { } else {
final User user = object.getUser(); final RealmUser user = object.getUser();
setAvatarInto(object.getAvatar(), hostname, user == null ? null : user.getUsername(), setAvatarInto(object.getAvatar(), hostname, user == null ? null : user.getUsername(),
rocketChatAvatar); rocketChatAvatar);
} }
......
...@@ -7,11 +7,11 @@ import android.widget.TextView; ...@@ -7,11 +7,11 @@ import android.widget.TextView;
import chat.rocket.android.R; import chat.rocket.android.R;
import chat.rocket.android.helper.Avatar; import chat.rocket.android.helper.Avatar;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.core.User;
import chat.rocket.android.widget.RocketChatAvatar; import chat.rocket.android.widget.RocketChatAvatar;
/** /**
* Renderer for User model. * Renderer for RealmUser model.
*/ */
public class UserRenderer extends AbstractRenderer<User> { public class UserRenderer extends AbstractRenderer<User> {
......
package chat.rocket.android.repositories;
import io.realm.Realm;
import io.realm.RealmResults;
import java.util.ArrayList;
import java.util.List;
import chat.rocket.android.model.core.Room;
import chat.rocket.android.model.ddp.RoomSubscription;
import rx.Observable;
public class RealmRoomRepository implements RoomRepository {
private final Realm realm;
public RealmRoomRepository(Realm realm) {
this.realm = realm;
}
@Override
public Observable<List<Room>> getOpenRooms() {
return realm.where(RoomSubscription.class)
.equalTo(RoomSubscription.OPEN, true)
.findAllAsync()
.asObservable()
.filter(roomSubscriptions -> roomSubscriptions != null && roomSubscriptions.isLoaded()
&& roomSubscriptions.isValid())
.map(roomSubscriptions -> toList(roomSubscriptions));
}
private List<Room> toList(RealmResults<RoomSubscription> roomSubscriptions) {
int total = roomSubscriptions.size();
final List<Room> roomList = new ArrayList<>(total);
for (int i = 0; i < total; i++) {
roomList.add(roomSubscriptions.get(i).asRoom());
}
return roomList;
}
}
package chat.rocket.android.repositories;
import io.realm.Realm;
import chat.rocket.android.model.core.User;
import chat.rocket.android.model.ddp.RealmUser;
import rx.Observable;
public class RealmUserRepository implements UserRepository {
private final Realm realm;
public RealmUserRepository(Realm realm) {
this.realm = realm;
}
@Override
public Observable<User> getCurrentUser() {
return realm.where(RealmUser.class)
.isNotEmpty(RealmUser.EMAILS)
.findFirstAsync()
.<RealmUser>asObservable()
.filter(realmUser -> realmUser != null && realmUser.isLoaded() && realmUser.isValid())
.map(realmUser -> realmUser.asUser());
}
}
package chat.rocket.android.repositories;
import java.util.List;
import chat.rocket.android.model.core.Room;
import rx.Observable;
public interface RoomRepository {
Observable<List<Room>> getOpenRooms();
}
package chat.rocket.android.repositories;
import chat.rocket.android.model.core.User;
import rx.Observable;
public interface UserRepository {
Observable<User> getCurrentUser();
}
...@@ -9,8 +9,8 @@ import org.json.JSONObject; ...@@ -9,8 +9,8 @@ import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
/** /**
* Backend implementation to store ServerInfo. * Backend implementation to store ServerInfo.
......
...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.LogcatIfError; ...@@ -15,8 +15,8 @@ import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmStore; import chat.rocket.persistence.realm.RealmStore;
import chat.rocket.android.service.ddp.base.ActiveUsersSubscriber; import chat.rocket.android.service.ddp.base.ActiveUsersSubscriber;
import chat.rocket.android.service.ddp.base.LoginServiceConfigurationSubscriber; import chat.rocket.android.service.ddp.base.LoginServiceConfigurationSubscriber;
import chat.rocket.android.service.ddp.base.UserDataSubscriber; import chat.rocket.android.service.ddp.base.UserDataSubscriber;
......
...@@ -11,7 +11,7 @@ import org.json.JSONObject; ...@@ -11,7 +11,7 @@ import org.json.JSONObject;
import java.util.Iterator; import java.util.Iterator;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.Registrable; import chat.rocket.android.service.Registrable;
import chat.rocket.android_ddp.DDPSubscription; import chat.rocket.android_ddp.DDPSubscription;
......
...@@ -3,7 +3,7 @@ package chat.rocket.android.service.ddp.base; ...@@ -3,7 +3,7 @@ package chat.rocket.android.service.ddp.base;
import android.content.Context; import android.content.Context;
import org.json.JSONArray; import org.json.JSONArray;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber; import chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber;
......
...@@ -5,8 +5,8 @@ import io.realm.RealmObject; ...@@ -5,8 +5,8 @@ import io.realm.RealmObject;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
...@@ -30,7 +30,7 @@ public class ActiveUsersSubscriber extends AbstractBaseSubscriber { ...@@ -30,7 +30,7 @@ public class ActiveUsersSubscriber extends AbstractBaseSubscriber {
@Override @Override
protected Class<? extends RealmObject> getModelClass() { protected Class<? extends RealmObject> getModelClass() {
return User.class; return RealmUser.class;
} }
@Override @Override
......
...@@ -4,7 +4,7 @@ import android.content.Context; ...@@ -4,7 +4,7 @@ import android.content.Context;
import io.realm.RealmObject; import io.realm.RealmObject;
import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration; import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
......
...@@ -5,8 +5,8 @@ import io.realm.RealmObject; ...@@ -5,8 +5,8 @@ import io.realm.RealmObject;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
...@@ -30,7 +30,7 @@ public class UserDataSubscriber extends AbstractBaseSubscriber { ...@@ -30,7 +30,7 @@ public class UserDataSubscriber extends AbstractBaseSubscriber {
@Override @Override
protected Class<? extends RealmObject> getModelClass() { protected Class<? extends RealmObject> getModelClass() {
return User.class; return RealmUser.class;
} }
@Override @Override
......
...@@ -7,7 +7,7 @@ import org.json.JSONObject; ...@@ -7,7 +7,7 @@ import org.json.JSONObject;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber; import chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber;
import chat.rocket.android_ddp.DDPSubscription; import chat.rocket.android_ddp.DDPSubscription;
......
...@@ -2,7 +2,7 @@ package chat.rocket.android.service.ddp.stream; ...@@ -2,7 +2,7 @@ package chat.rocket.android.service.ddp.stream;
import android.content.Context; import android.content.Context;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
abstract class AbstractStreamNotifyUserEventSubscriber extends AbstractStreamNotifyEventSubscriber { abstract class AbstractStreamNotifyUserEventSubscriber extends AbstractStreamNotifyEventSubscriber {
......
...@@ -6,7 +6,7 @@ import org.json.JSONException; ...@@ -6,7 +6,7 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
public class StreamNotifyUserSubscriptionsChanged extends AbstractStreamNotifyUserEventSubscriber { public class StreamNotifyUserSubscriptionsChanged extends AbstractStreamNotifyUserEventSubscriber {
......
...@@ -5,8 +5,8 @@ import io.realm.RealmObject; ...@@ -5,8 +5,8 @@ import io.realm.RealmObject;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
...@@ -33,7 +33,7 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber { ...@@ -33,7 +33,7 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber {
@Override @Override
protected Class<? extends RealmObject> getModelClass() { protected Class<? extends RealmObject> getModelClass() {
return Message.class; return RealmMessage.class;
} }
@Override @Override
...@@ -43,6 +43,6 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber { ...@@ -43,6 +43,6 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber {
@Override @Override
protected JSONObject customizeFieldJson(JSONObject json) throws JSONException { protected JSONObject customizeFieldJson(JSONObject json) throws JSONException {
return Message.customizeJson(super.customizeFieldJson(json)); return RealmMessage.customizeJson(super.customizeFieldJson(json));
} }
} }
...@@ -6,7 +6,7 @@ import android.content.SharedPreferences; ...@@ -6,7 +6,7 @@ import android.content.SharedPreferences;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.helper.TextUtils; import chat.rocket.android.helper.TextUtils;
import chat.rocket.android.model.ddp.RoomSubscription; import chat.rocket.android.model.ddp.RoomSubscription;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.Registrable; import chat.rocket.android.service.Registrable;
public abstract class AbstractRocketChatCacheObserver implements Registrable { public abstract class AbstractRocketChatCacheObserver implements Registrable {
......
...@@ -4,7 +4,7 @@ import android.content.Context; ...@@ -4,7 +4,7 @@ import android.content.Context;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.Registrable; import chat.rocket.android.service.Registrable;
import chat.rocket.android.service.ddp.stream.StreamRoomMessage; import chat.rocket.android.service.ddp.stream.StreamRoomMessage;
......
...@@ -3,8 +3,8 @@ package chat.rocket.android.service.observer; ...@@ -3,8 +3,8 @@ package chat.rocket.android.service.observer;
import android.content.Context; import android.content.Context;
import io.realm.RealmObject; import io.realm.RealmObject;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.realm_helper.RealmListObserver; import chat.rocket.persistence.realm.RealmListObserver;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.Registrable; import chat.rocket.android.service.Registrable;
......
...@@ -8,8 +8,8 @@ import java.util.ArrayList; ...@@ -8,8 +8,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.Registrable; import chat.rocket.android.service.Registrable;
import chat.rocket.android.service.ddp.stream.StreamNotifyUserSubscriptionsChanged; import chat.rocket.android.service.ddp.stream.StreamNotifyUserSubscriptionsChanged;
...@@ -18,7 +18,7 @@ import hugo.weaving.DebugLog; ...@@ -18,7 +18,7 @@ import hugo.weaving.DebugLog;
/** /**
* observe the user with emails. * observe the user with emails.
*/ */
public class CurrentUserObserver extends AbstractModelObserver<User> { public class CurrentUserObserver extends AbstractModelObserver<RealmUser> {
private final MethodCallHelper methodCall; private final MethodCallHelper methodCall;
private boolean currentUserExists; private boolean currentUserExists;
private ArrayList<Registrable> listeners; private ArrayList<Registrable> listeners;
...@@ -31,12 +31,12 @@ public class CurrentUserObserver extends AbstractModelObserver<User> { ...@@ -31,12 +31,12 @@ public class CurrentUserObserver extends AbstractModelObserver<User> {
} }
@Override @Override
public RealmResults<User> queryItems(Realm realm) { public RealmResults<RealmUser> queryItems(Realm realm) {
return User.queryCurrentUser(realm).findAll(); return RealmUser.queryCurrentUser(realm).findAll();
} }
@Override @Override
public void onUpdateResults(List<User> results) { public void onUpdateResults(List<RealmUser> results) {
boolean exists = !results.isEmpty(); boolean exists = !results.isEmpty();
if (currentUserExists != exists) { if (currentUserExists != exists) {
...@@ -50,7 +50,7 @@ public class CurrentUserObserver extends AbstractModelObserver<User> { ...@@ -50,7 +50,7 @@ public class CurrentUserObserver extends AbstractModelObserver<User> {
} }
@DebugLog @DebugLog
private void onLogin(User user) { private void onLogin(RealmUser user) {
if (listeners != null) { if (listeners != null) {
onLogout(); onLogout();
} }
......
...@@ -17,7 +17,7 @@ import chat.rocket.android.helper.OkHttpHelper; ...@@ -17,7 +17,7 @@ import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.internal.FileUploading; import chat.rocket.android.model.internal.FileUploading;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.MultipartBody; import okhttp3.MultipartBody;
......
...@@ -14,10 +14,10 @@ import chat.rocket.android.helper.LogcatIfError; ...@@ -14,10 +14,10 @@ import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.helper.OkHttpHelper; import chat.rocket.android.helper.OkHttpHelper;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.model.internal.FileUploading; import chat.rocket.android.model.internal.FileUploading;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.Request; import okhttp3.Request;
...@@ -92,8 +92,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo ...@@ -92,8 +92,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo
return; return;
} }
User currentUser = realmHelper.executeTransactionForRead(realm -> RealmUser currentUser = realmHelper.executeTransactionForRead(realm ->
User.queryCurrentUser(realm).findFirst()); RealmUser.queryCurrentUser(realm).findFirst());
Session session = realmHelper.executeTransactionForRead(realm -> Session session = realmHelper.executeTransactionForRead(realm ->
Session.queryDefaultSession(realm).findFirst()); Session.queryDefaultSession(realm).findFirst());
if (currentUser == null || session == null) { if (currentUser == null || session == null) {
......
...@@ -16,9 +16,9 @@ import chat.rocket.android.helper.LogcatIfError; ...@@ -16,9 +16,9 @@ import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.PublicSetting; import chat.rocket.android.model.ddp.PublicSetting;
import chat.rocket.android.model.ddp.PublicSettingsConstants; import chat.rocket.android.model.ddp.PublicSettingsConstants;
import chat.rocket.android.model.ddp.User; import chat.rocket.android.model.ddp.RealmUser;
import chat.rocket.android.model.internal.GcmPushRegistration; import chat.rocket.android.model.internal.GcmPushRegistration;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
...@@ -70,8 +70,8 @@ public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRe ...@@ -70,8 +70,8 @@ public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRe
.getString(realmHelper, PublicSettingsConstants.Push.GCM_PROJECT_NUMBER, "").trim(); .getString(realmHelper, PublicSettingsConstants.Push.GCM_PROJECT_NUMBER, "").trim();
final String gcmToken = getGcmToken(senderId); final String gcmToken = getGcmToken(senderId);
final User currentUser = realmHelper.executeTransactionForRead(realm -> final RealmUser currentUser = realmHelper.executeTransactionForRead(realm ->
User.queryCurrentUser(realm).findFirst()); RealmUser.queryCurrentUser(realm).findFirst());
final String userId = currentUser != null ? currentUser.getId() : null; final String userId = currentUser != null ? currentUser.getId() : null;
final String pushId = RocketChatCache.getOrCreatePushId(context); final String pushId = RocketChatCache.getOrCreatePushId(context);
......
...@@ -11,7 +11,7 @@ import chat.rocket.android.api.MethodCallHelper; ...@@ -11,7 +11,7 @@ import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure; import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
......
...@@ -11,9 +11,9 @@ import bolts.Task; ...@@ -11,9 +11,9 @@ import bolts.Task;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.model.internal.LoadMessageProcedure; import chat.rocket.android.model.internal.LoadMessageProcedure;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
...@@ -56,11 +56,11 @@ public class LoadMessageProcedureObserver extends AbstractModelObserver<LoadMess ...@@ -56,11 +56,11 @@ public class LoadMessageProcedureObserver extends AbstractModelObserver<LoadMess
).onSuccessTask(task -> ).onSuccessTask(task ->
methodCall.loadHistory(roomId, isReset ? 0 : timestamp, count, lastSeen) methodCall.loadHistory(roomId, isReset ? 0 : timestamp, count, lastSeen)
.onSuccessTask(_task -> { .onSuccessTask(_task -> {
Message lastMessage = realmHelper.executeTransactionForRead(realm -> RealmMessage lastMessage = realmHelper.executeTransactionForRead(realm ->
realm.where(Message.class) realm.where(RealmMessage.class)
.equalTo(Message.ROOM_ID, roomId) .equalTo(RealmMessage.ROOM_ID, roomId)
.equalTo(Message.SYNC_STATE, SyncState.SYNCED) .equalTo(RealmMessage.SYNC_STATE, SyncState.SYNCED)
.findAllSorted(Message.TIMESTAMP, Sort.ASCENDING).first(null)); .findAllSorted(RealmMessage.TIMESTAMP, Sort.ASCENDING).first(null));
long lastTs = lastMessage != null ? lastMessage.getTimestamp() : 0; long lastTs = lastMessage != null ? lastMessage.getTimestamp() : 0;
int messageCount = _task.getResult().length(); int messageCount = _task.getResult().length();
return realmHelper.executeTransaction(realm -> return realmHelper.executeTransaction(realm ->
......
...@@ -10,7 +10,7 @@ import chat.rocket.android.helper.CheckSum; ...@@ -10,7 +10,7 @@ import chat.rocket.android.helper.CheckSum;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.internal.MethodCall; import chat.rocket.android.model.internal.MethodCall;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android_ddp.DDPClientCallback; import chat.rocket.android_ddp.DDPClientCallback;
......
...@@ -10,14 +10,14 @@ import chat.rocket.android.api.MethodCallHelper; ...@@ -10,14 +10,14 @@ import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.log.RCLog; import chat.rocket.android.log.RCLog;
import chat.rocket.android.model.SyncState; import chat.rocket.android.model.SyncState;
import chat.rocket.android.model.ddp.Message; import chat.rocket.android.model.ddp.RealmMessage;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
/** /**
* Observe messages for sending. * Observe messages for sending.
*/ */
public class NewMessageObserver extends AbstractModelObserver<Message> { public class NewMessageObserver extends AbstractModelObserver<RealmMessage> {
private final MethodCallHelper methodCall; private final MethodCallHelper methodCall;
...@@ -28,10 +28,10 @@ public class NewMessageObserver extends AbstractModelObserver<Message> { ...@@ -28,10 +28,10 @@ public class NewMessageObserver extends AbstractModelObserver<Message> {
realmHelper.executeTransaction(realm -> { realmHelper.executeTransaction(realm -> {
// resume pending operations. // resume pending operations.
RealmResults<Message> pendingMethodCalls = realm.where(Message.class) RealmResults<RealmMessage> pendingMethodCalls = realm.where(RealmMessage.class)
.equalTo(Message.SYNC_STATE, SyncState.SYNCING) .equalTo(RealmMessage.SYNC_STATE, SyncState.SYNCING)
.findAll(); .findAll();
for (Message message : pendingMethodCalls) { for (RealmMessage message : pendingMethodCalls) {
message.setSyncState(SyncState.NOT_SYNCED); message.setSyncState(SyncState.NOT_SYNCED);
} }
...@@ -40,37 +40,37 @@ public class NewMessageObserver extends AbstractModelObserver<Message> { ...@@ -40,37 +40,37 @@ public class NewMessageObserver extends AbstractModelObserver<Message> {
} }
@Override @Override
public RealmResults<Message> queryItems(Realm realm) { public RealmResults<RealmMessage> queryItems(Realm realm) {
return realm.where(Message.class) return realm.where(RealmMessage.class)
.equalTo(Message.SYNC_STATE, SyncState.NOT_SYNCED) .equalTo(RealmMessage.SYNC_STATE, SyncState.NOT_SYNCED)
.isNotNull(Message.ROOM_ID) .isNotNull(RealmMessage.ROOM_ID)
.findAll(); .findAll();
} }
@Override @Override
public void onUpdateResults(List<Message> results) { public void onUpdateResults(List<RealmMessage> results) {
if (results.isEmpty()) { if (results.isEmpty()) {
return; return;
} }
final Message message = results.get(0); final RealmMessage message = results.get(0);
final String messageId = message.getId(); final String messageId = message.getId();
final String roomId = message.getRoomId(); final String roomId = message.getRoomId();
final String msg = message.getMessage(); final String msg = message.getMessage();
realmHelper.executeTransaction(realm -> realmHelper.executeTransaction(realm ->
realm.createOrUpdateObjectFromJson(Message.class, new JSONObject() realm.createOrUpdateObjectFromJson(RealmMessage.class, new JSONObject()
.put(Message.ID, messageId) .put(RealmMessage.ID, messageId)
.put(Message.SYNC_STATE, SyncState.SYNCING) .put(RealmMessage.SYNC_STATE, SyncState.SYNCING)
) )
).onSuccessTask(task -> methodCall.sendMessage(messageId, roomId, msg) ).onSuccessTask(task -> methodCall.sendMessage(messageId, roomId, msg)
).continueWith(task -> { ).continueWith(task -> {
if (task.isFaulted()) { if (task.isFaulted()) {
RCLog.w(task.getError()); RCLog.w(task.getError());
realmHelper.executeTransaction(realm -> realmHelper.executeTransaction(realm ->
realm.createOrUpdateObjectFromJson(Message.class, new JSONObject() realm.createOrUpdateObjectFromJson(RealmMessage.class, new JSONObject()
.put(Message.ID, messageId) .put(RealmMessage.ID, messageId)
.put(Message.SYNC_STATE, SyncState.FAILED))); .put(RealmMessage.SYNC_STATE, SyncState.FAILED)));
} }
return null; return null;
}); });
......
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
import chat.rocket.android.helper.GcmPushSettingHelper; import chat.rocket.android.helper.GcmPushSettingHelper;
import chat.rocket.android.model.ddp.PublicSetting; import chat.rocket.android.model.ddp.PublicSetting;
import chat.rocket.android.model.internal.GcmPushRegistration; import chat.rocket.android.model.internal.GcmPushRegistration;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
public class PushSettingsObserver extends AbstractModelObserver<PublicSetting> { public class PushSettingsObserver extends AbstractModelObserver<PublicSetting> {
......
...@@ -12,7 +12,7 @@ import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure; ...@@ -12,7 +12,7 @@ import chat.rocket.android.model.internal.GetUsersOfRoomsProcedure;
import chat.rocket.android.model.internal.LoadMessageProcedure; import chat.rocket.android.model.internal.LoadMessageProcedure;
import chat.rocket.android.model.internal.MethodCall; import chat.rocket.android.model.internal.MethodCall;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
import chat.rocket.android.service.internal.StreamRoomMessageManager; import chat.rocket.android.service.internal.StreamRoomMessageManager;
import hugo.weaving.DebugLog; import hugo.weaving.DebugLog;
......
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
import chat.rocket.android.api.MethodCallHelper; import chat.rocket.android.api.MethodCallHelper;
import chat.rocket.android.helper.LogcatIfError; import chat.rocket.android.helper.LogcatIfError;
import chat.rocket.android.model.internal.Session; import chat.rocket.android.model.internal.Session;
import chat.rocket.android.realm_helper.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.android.service.DDPClientRef; import chat.rocket.android.service.DDPClientRef;
public class TokenLoginObserver extends AbstractModelObserver<Session> { public class TokenLoginObserver extends AbstractModelObserver<Session> {
......
...@@ -3,7 +3,9 @@ ...@@ -3,7 +3,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:theme="@style/AppTheme.Dark"> android:theme="@style/AppTheme.Dark"
android:visibility="invisible"
tools:visibility="visible">
<LinearLayout <LinearLayout
android:id="@+id/user_info_container" android:id="@+id/user_info_container"
......
<manifest package="chat.rocket.persistence.realm"/>
\ No newline at end of file
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmChangeListener; import io.realm.RealmChangeListener;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmChangeListener; import io.realm.RealmChangeListener;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import android.content.Context; import android.content.Context;
import android.support.annotation.LayoutRes; import android.support.annotation.LayoutRes;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import io.realm.Realm; import io.realm.Realm;
import io.realm.RealmChangeListener; import io.realm.RealmChangeListener;
......
package chat.rocket.android.realm_helper; package chat.rocket.persistence.realm;
import io.realm.Realm;
import io.realm.RealmConfiguration; import io.realm.RealmConfiguration;
import java.util.HashMap; import java.util.HashMap;
...@@ -35,4 +36,14 @@ public class RealmStore { ...@@ -35,4 +36,14 @@ public class RealmStore {
} }
return new RealmHelper(sStore.get(name)); return new RealmHelper(sStore.get(name));
} }
public static Realm getRealm(String name) {
RealmHelper realmHelper = get(name);
if (realmHelper == null) {
return null;
}
return realmHelper.instance();
}
} }
<manifest package="chat.rocket.android.realm_helper"/>
\ No newline at end of file
include ':app', ':android-ddp', ':rocket-chat-android-widgets', ':realm-helpers', include ':app', ':android-ddp', ':rocket-chat-android-widgets', ':persistence-realm',
':log-wrapper' ':log-wrapper'
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