diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0a60f99..64b0ac0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,7 +10,7 @@
@@ -30,11 +30,11 @@
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/java/org/mercury_im/messenger/ClientStateHandler.java b/app/src/main/java/org/mercury_im/messenger/android/ClientStateHandler.java
similarity index 90%
rename from app/src/main/java/org/mercury_im/messenger/ClientStateHandler.java
rename to app/src/main/java/org/mercury_im/messenger/android/ClientStateHandler.java
index 7d4426c..23d757f 100644
--- a/app/src/main/java/org/mercury_im/messenger/ClientStateHandler.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ClientStateHandler.java
@@ -1,8 +1,9 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.android;
import android.app.Activity;
-import org.mercury_im.messenger.util.AbstractActivityLifecycleCallbacks;
+import org.mercury_im.messenger.core.ClientStateListener;
+import org.mercury_im.messenger.android.util.AbstractActivityLifecycleCallbacks;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java b/app/src/main/java/org/mercury_im/messenger/android/MercuryImApplication.java
similarity index 86%
rename from app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java
rename to app/src/main/java/org/mercury_im/messenger/android/MercuryImApplication.java
index 09b439e..cd15f58 100644
--- a/app/src/main/java/org/mercury_im/messenger/MercuryImApplication.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/MercuryImApplication.java
@@ -1,16 +1,17 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.android;
import android.app.Application;
import android.content.Intent;
import android.os.Build;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.di.component.AppComponent;
-import org.mercury_im.messenger.di.component.DaggerAppComponent;
-import org.mercury_im.messenger.di.module.AppModule;
+import org.mercury_im.messenger.android.di.component.DaggerAppComponent;
+import org.mercury_im.messenger.core.Messenger;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.android.di.component.AppComponent;
+import org.mercury_im.messenger.android.di.module.AppModule;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.service.MercuryConnectionService;
-import org.mercury_im.messenger.xmpp.CsiManager;
+import org.mercury_im.messenger.android.service.MercuryConnectionService;
+import org.mercury_im.messenger.core.xmpp.CsiManager;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/Notifications.java b/app/src/main/java/org/mercury_im/messenger/android/Notifications.java
similarity index 96%
rename from app/src/main/java/org/mercury_im/messenger/Notifications.java
rename to app/src/main/java/org/mercury_im/messenger/android/Notifications.java
index 823d844..b5061f6 100644
--- a/app/src/main/java/org/mercury_im/messenger/Notifications.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/Notifications.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.android;
import android.annotation.TargetApi;
import android.app.NotificationChannel;
@@ -11,8 +11,9 @@ import android.os.Build;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
+import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.chat.DirectChat;
-import org.mercury_im.messenger.ui.chat.ChatActivity;
+import org.mercury_im.messenger.android.ui.chat.ChatActivity;
import java.util.UUID;
diff --git a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java b/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
similarity index 50%
rename from app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java
rename to app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
index b64b939..a5db291 100644
--- a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
@@ -1,25 +1,25 @@
-package org.mercury_im.messenger.di.component;
+package org.mercury_im.messenger.android.di.component;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.data.di.RepositoryModule;
-import org.mercury_im.messenger.di.module.AndroidPersistenceModule;
-import org.mercury_im.messenger.di.module.AppModule;
-import org.mercury_im.messenger.di.module.ViewModelModule;
-import org.mercury_im.messenger.service.MercuryConnectionService;
-import org.mercury_im.messenger.store.MercuryEntityCapsStore;
-import org.mercury_im.messenger.ui.MainActivity;
-import org.mercury_im.messenger.ui.account.AndroidAccountsViewModel;
-import org.mercury_im.messenger.ui.account.AndroidLoginViewModel;
-import org.mercury_im.messenger.ui.chat.ChatActivity;
-import org.mercury_im.messenger.ui.chat.ChatInputFragment;
-import org.mercury_im.messenger.ui.chat.ChatInputViewModel;
-import org.mercury_im.messenger.ui.chat.ChatViewModel;
-import org.mercury_im.messenger.ui.chatlist.ChatListViewModel;
-import org.mercury_im.messenger.ui.roster.contacts.ContactListViewModel;
-import org.mercury_im.messenger.ui.roster.contacts.detail.ContactDetailActivity;
-import org.mercury_im.messenger.ui.roster.contacts.detail.ContactDetailViewModel;
-import org.mercury_im.messenger.viewmodel.accounts.AccountsViewModel;
-import org.mercury_im.messenger.viewmodel.accounts.LoginViewModel;
+import org.mercury_im.messenger.android.di.module.AndroidPersistenceModule;
+import org.mercury_im.messenger.android.di.module.AppModule;
+import org.mercury_im.messenger.core.di.module.ViewModelModule;
+import org.mercury_im.messenger.android.service.MercuryConnectionService;
+import org.mercury_im.messenger.core.store.MercuryEntityCapsStore;
+import org.mercury_im.messenger.android.ui.MainActivity;
+import org.mercury_im.messenger.android.ui.account.AndroidAccountsViewModel;
+import org.mercury_im.messenger.android.ui.account.AndroidLoginViewModel;
+import org.mercury_im.messenger.android.ui.chat.ChatActivity;
+import org.mercury_im.messenger.android.ui.chat.ChatInputFragment;
+import org.mercury_im.messenger.android.ui.chat.ChatInputViewModel;
+import org.mercury_im.messenger.android.ui.chat.ChatViewModel;
+import org.mercury_im.messenger.android.ui.chatlist.ChatListViewModel;
+import org.mercury_im.messenger.android.ui.roster.contacts.ContactListViewModel;
+import org.mercury_im.messenger.android.ui.roster.contacts.detail.ContactDetailActivity;
+import org.mercury_im.messenger.android.ui.roster.contacts.detail.ContactDetailViewModel;
+import org.mercury_im.messenger.core.viewmodel.accounts.AccountsViewModel;
+import org.mercury_im.messenger.core.viewmodel.accounts.LoginViewModel;
import javax.inject.Singleton;
diff --git a/app/src/main/java/org/mercury_im/messenger/di/component/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/di/component/package-info.java
similarity index 59%
rename from app/src/main/java/org/mercury_im/messenger/di/component/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/di/component/package-info.java
index 3b2cffd..476c90b 100644
--- a/app/src/main/java/org/mercury_im/messenger/di/component/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/component/package-info.java
@@ -1,4 +1,4 @@
/**
* The Component specifies which classes can be injected from the module.
*/
-package org.mercury_im.messenger.di.component;
+package org.mercury_im.messenger.android.di.component;
diff --git a/app/src/main/java/org/mercury_im/messenger/di/module/AndroidPersistenceModule.java b/app/src/main/java/org/mercury_im/messenger/android/di/module/AndroidPersistenceModule.java
similarity index 93%
rename from app/src/main/java/org/mercury_im/messenger/di/module/AndroidPersistenceModule.java
rename to app/src/main/java/org/mercury_im/messenger/android/di/module/AndroidPersistenceModule.java
index 05ad91a..30e1d8d 100644
--- a/app/src/main/java/org/mercury_im/messenger/di/module/AndroidPersistenceModule.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/module/AndroidPersistenceModule.java
@@ -1,9 +1,9 @@
-package org.mercury_im.messenger.di.module;
+package org.mercury_im.messenger.android.di.module;
import android.app.Application;
import org.mercury_im.messenger.data.model.Models;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import org.mercury_im.messenger.BuildConfig;
import javax.inject.Named;
diff --git a/app/src/main/java/org/mercury_im/messenger/di/module/AppModule.java b/app/src/main/java/org/mercury_im/messenger/android/di/module/AppModule.java
similarity index 82%
rename from app/src/main/java/org/mercury_im/messenger/di/module/AppModule.java
rename to app/src/main/java/org/mercury_im/messenger/android/di/module/AppModule.java
index d2fceee..d4c6668 100644
--- a/app/src/main/java/org/mercury_im/messenger/di/module/AppModule.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/module/AppModule.java
@@ -1,9 +1,9 @@
-package org.mercury_im.messenger.di.module;
+package org.mercury_im.messenger.android.di.module;
import android.app.Application;
import org.jivesoftware.smackx.ping.android.ServerPingWithAlarmManager;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import javax.inject.Singleton;
diff --git a/app/src/main/java/org/mercury_im/messenger/di/module/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/di/module/package-info.java
similarity index 91%
rename from app/src/main/java/org/mercury_im/messenger/di/module/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/di/module/package-info.java
index 5b940b8..d0f5930 100644
--- a/app/src/main/java/org/mercury_im/messenger/di/module/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/module/package-info.java
@@ -6,4 +6,4 @@
*
* @see The Simples Dagger2 Dependency Injection Sample App
*/
-package org.mercury_im.messenger.di.module;
+package org.mercury_im.messenger.android.di.module;
diff --git a/app/src/main/java/org/mercury_im/messenger/service/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/package-info.java
similarity index 56%
rename from app/src/main/java/org/mercury_im/messenger/service/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/package-info.java
index 6bb833a..199fd83 100644
--- a/app/src/main/java/org/mercury_im/messenger/service/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/package-info.java
@@ -1,4 +1,4 @@
/**
* Some Javadoc information about the package.
*/
-package org.mercury_im.messenger.service;
+package org.mercury_im.messenger.android;
diff --git a/app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java b/app/src/main/java/org/mercury_im/messenger/android/service/MercuryConnectionService.java
similarity index 93%
rename from app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java
rename to app/src/main/java/org/mercury_im/messenger/android/service/MercuryConnectionService.java
index 6be80c3..f2ee92b 100644
--- a/app/src/main/java/org/mercury_im/messenger/service/MercuryConnectionService.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/service/MercuryConnectionService.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.service;
+package org.mercury_im.messenger.android.service;
import android.app.Notification;
import android.app.PendingIntent;
@@ -12,10 +12,10 @@ import androidx.core.app.NotificationCompat;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.ping.android.ServerPingWithAlarmManager;
-import org.mercury_im.messenger.MercuryImApplication;
-import org.mercury_im.messenger.Notifications;
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.android.Notifications;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.ui.MainActivity;
+import org.mercury_im.messenger.android.ui.MainActivity;
/**
* Started, Bound Service, which is responsible for managing {@link XMPPConnection XMPPConnections}
diff --git a/app/src/main/java/org/mercury_im/messenger/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/service/package-info.java
similarity index 52%
rename from app/src/main/java/org/mercury_im/messenger/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/service/package-info.java
index 32a71d5..b5e1db2 100644
--- a/app/src/main/java/org/mercury_im/messenger/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/service/package-info.java
@@ -1,4 +1,4 @@
/**
* Some Javadoc information about the package.
*/
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.android.service;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
similarity index 87%
rename from app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
index d8a3bad..cf68682 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui;
+package org.mercury_im.messenger.android.ui;
import android.content.Intent;
import android.os.Bundle;
@@ -13,14 +13,14 @@ import androidx.fragment.app.FragmentTransaction;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.ui.chatlist.ChatListFragment;
-import org.mercury_im.messenger.ui.account.AccountsFragment;
-import org.mercury_im.messenger.ui.roster.RosterFragment;
-import org.mercury_im.messenger.ui.settings.SettingsActivity;
+import org.mercury_im.messenger.android.ui.chatlist.ChatListFragment;
+import org.mercury_im.messenger.android.ui.account.AccountsFragment;
+import org.mercury_im.messenger.android.ui.roster.RosterFragment;
+import org.mercury_im.messenger.android.ui.settings.SettingsActivity;
import javax.inject.Inject;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/MercuryAndroidViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/MercuryAndroidViewModel.java
similarity index 75%
rename from app/src/main/java/org/mercury_im/messenger/ui/MercuryAndroidViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/MercuryAndroidViewModel.java
index 52bc288..0e984f0 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/MercuryAndroidViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/MercuryAndroidViewModel.java
@@ -1,6 +1,6 @@
-package org.mercury_im.messenger.ui;
+package org.mercury_im.messenger.android.ui;
-import org.mercury_im.messenger.viewmodel.MercuryViewModel;
+import org.mercury_im.messenger.core.viewmodel.MercuryViewModel;
import io.reactivex.disposables.Disposable;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsFragment.java
similarity index 98%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsFragment.java
index 852af97..dd3c476 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.ui.account;
import android.content.Context;
import android.os.Bundle;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsRecyclerViewAdapter.java
similarity index 90%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/AccountsRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsRecyclerViewAdapter.java
index fac0b9a..3288e52 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AccountsRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.ui.account;
import android.view.LayoutInflater;
import android.view.View;
@@ -13,11 +13,11 @@ import androidx.recyclerview.widget.RecyclerView;
import org.jetbrains.annotations.NotNull;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.ui.avatar.AvatarDrawable;
-import org.mercury_im.messenger.ui.account.AccountsFragment.OnAccountListItemClickListener;
-import org.mercury_im.messenger.util.AbstractDiffCallback;
-import org.mercury_im.messenger.xmpp.MercuryConnection;
-import org.mercury_im.messenger.xmpp.state.ConnectionState;
+import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable;
+import org.mercury_im.messenger.android.ui.account.AccountsFragment.OnAccountListItemClickListener;
+import org.mercury_im.messenger.android.util.AbstractDiffCallback;
+import org.mercury_im.messenger.core.xmpp.MercuryConnection;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionState;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AddAccountDialogFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AddAccountDialogFragment.java
similarity index 97%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/AddAccountDialogFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/account/AddAccountDialogFragment.java
index ecac931..d3574e3 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/AddAccountDialogFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AddAccountDialogFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.ui.account;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -18,7 +18,7 @@ import androidx.appcompat.app.AppCompatDialogFragment;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
import butterknife.BindView;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AndroidAccountsViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidAccountsViewModel.java
similarity index 81%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/AndroidAccountsViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidAccountsViewModel.java
index 18a5fdf..547f76b 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/AndroidAccountsViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidAccountsViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.ui.account;
import android.app.Application;
@@ -7,11 +7,11 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.ui.MercuryAndroidViewModel;
-import org.mercury_im.messenger.viewmodel.accounts.AccountsViewModel;
-import org.mercury_im.messenger.xmpp.state.ConnectionPoolState;
+import org.mercury_im.messenger.android.ui.MercuryAndroidViewModel;
+import org.mercury_im.messenger.core.viewmodel.accounts.AccountsViewModel;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionPoolState;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AndroidLoginViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidLoginViewModel.java
similarity index 91%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/AndroidLoginViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidLoginViewModel.java
index 2ec530d..c3bf00b 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/AndroidLoginViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/AndroidLoginViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.ui.account;
import android.app.Application;
@@ -6,14 +6,14 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.account.error.PasswordError;
-import org.mercury_im.messenger.account.error.UsernameError;
-import org.mercury_im.messenger.ui.MercuryAndroidViewModel;
-import org.mercury_im.messenger.util.Optional;
-import org.mercury_im.messenger.util.TextChangedListener;
-import org.mercury_im.messenger.viewmodel.accounts.LoginViewModel;
+import org.mercury_im.messenger.core.account.error.PasswordError;
+import org.mercury_im.messenger.core.account.error.UsernameError;
+import org.mercury_im.messenger.android.ui.MercuryAndroidViewModel;
+import org.mercury_im.messenger.core.util.Optional;
+import org.mercury_im.messenger.android.util.TextChangedListener;
+import org.mercury_im.messenger.core.viewmodel.accounts.LoginViewModel;
import java.util.logging.Logger;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/account/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/package-info.java
new file mode 100644
index 0000000..cf59eb1
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.account;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/avatar/AvatarDrawable.java b/app/src/main/java/org/mercury_im/messenger/android/ui/avatar/AvatarDrawable.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/ui/avatar/AvatarDrawable.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/avatar/AvatarDrawable.java
index e014ad4..d2f83de 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/avatar/AvatarDrawable.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/avatar/AvatarDrawable.java
@@ -13,7 +13,7 @@
* limitations under the License.
*/
-package org.mercury_im.messenger.ui.avatar;
+package org.mercury_im.messenger.android.ui.avatar;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -22,7 +22,7 @@ import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
-import org.mercury_im.messenger.util.ColorUtil;
+import org.mercury_im.messenger.android.util.ColorUtil;
/**
* Generates a round colored drawable with white initials.
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
similarity index 96%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
index 405c388..7a5d239 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui.chat;
import android.content.Intent;
import android.os.Bundle;
@@ -18,17 +18,16 @@ import androidx.recyclerview.widget.RecyclerView;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.ui.roster.contacts.detail.ContactDetailActivity;
+import org.mercury_im.messenger.android.ui.roster.contacts.detail.ContactDetailActivity;
import java.util.UUID;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
public class ChatActivity extends AppCompatActivity
implements ChatInputFragment.OnChatInputActionListener, SearchView.OnQueryTextListener {
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputFragment.java
similarity index 98%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputFragment.java
index 1de0c9f..7a25561 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputFragment.java
@@ -1,9 +1,8 @@
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui.chat;
import android.content.Context;
import android.os.Bundle;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputViewModel.java
similarity index 80%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputViewModel.java
index 33a665e..55202de 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatInputViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui.chat;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatViewModel.java
similarity index 92%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/ChatViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatViewModel.java
index 74ceaa1..506b7e1 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatViewModel.java
@@ -1,15 +1,15 @@
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui.chat;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import org.jxmpp.jid.EntityBareJid;
-import org.mercury_im.messenger.MercuryImApplication;
-import org.mercury_im.messenger.Messenger;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
-import org.mercury_im.messenger.data.repository.MessageRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.core.Messenger;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.message.Message;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/MessagesRecyclerViewAdapter.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chat/MessagesRecyclerViewAdapter.java
index e9581e0..815b9e7 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/MessagesRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui.chat;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
@@ -11,8 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.message.Message;
-import org.mercury_im.messenger.entity.message.content.TextPayload;
-import org.mercury_im.messenger.ui.util.MessageBackgroundDrawable;
+import org.mercury_im.messenger.android.ui.util.MessageBackgroundDrawable;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/chat/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/package-info.java
new file mode 100644
index 0000000..c825c37
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.chat;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListFragment.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListFragment.java
index f14b263..d8bb3e7 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.chatlist;
+package org.mercury_im.messenger.android.ui.chatlist;
import android.os.Bundle;
@@ -16,7 +16,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
-import org.mercury_im.messenger.Messenger;
+import org.mercury_im.messenger.core.Messenger;
import org.mercury_im.messenger.R;
import butterknife.BindView;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListRecyclerViewAdapter.java
similarity index 92%
rename from app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListRecyclerViewAdapter.java
index 87ff7cd..d671de4 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.chatlist;
+package org.mercury_im.messenger.android.ui.chatlist;
import android.content.Context;
import android.content.Intent;
@@ -18,11 +18,9 @@ import androidx.recyclerview.widget.RecyclerView;
import org.jivesoftware.smack.util.Objects;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.chat.DirectChat;
-import org.mercury_im.messenger.ui.avatar.AvatarDrawable;
-import org.mercury_im.messenger.ui.chat.ChatActivity;
-import org.mercury_im.messenger.ui.roster.contacts.detail.ContactDetailActivity;
-import org.mercury_im.messenger.ui.util.AbstractRecyclerViewAdapter;
-import org.mercury_im.messenger.util.ColorUtil;
+import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable;
+import org.mercury_im.messenger.android.ui.chat.ChatActivity;
+import org.mercury_im.messenger.android.ui.util.AbstractRecyclerViewAdapter;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListViewModel.java
similarity index 84%
rename from app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListViewModel.java
index cd7be0b..f10d654 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/ChatListViewModel.java
@@ -1,11 +1,11 @@
-package org.mercury_im.messenger.ui.chatlist;
+package org.mercury_im.messenger.android.ui.chatlist;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
-import org.mercury_im.messenger.MercuryImApplication;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
import org.mercury_im.messenger.entity.chat.DirectChat;
import java.util.ArrayList;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/package-info.java
new file mode 100644
index 0000000..53bc5da
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chatlist/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.chatlist;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/package-info.java
similarity index 55%
rename from app/src/main/java/org/mercury_im/messenger/ui/chat/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/package-info.java
index 38fc930..a8dddb5 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/chat/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/package-info.java
@@ -1,4 +1,4 @@
/**
* Some Javadoc information about the package.
*/
-package org.mercury_im.messenger.ui.chat;
+package org.mercury_im.messenger.android.ui;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/RosterFragment.java
similarity index 91%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/RosterFragment.java
index 6aeffdc..5ba97e1 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/RosterFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster;
+package org.mercury_im.messenger.android.ui.roster;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -15,8 +15,8 @@ import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.ui.roster.bookmarks.BookmarkListFragment;
-import org.mercury_im.messenger.ui.roster.contacts.ContactListFragment;
+import org.mercury_im.messenger.android.ui.roster.bookmarks.BookmarkListFragment;
+import org.mercury_im.messenger.android.ui.roster.contacts.ContactListFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/bookmarks/BookmarkListFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java
similarity index 94%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/bookmarks/BookmarkListFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java
index ed5752e..c79eebc 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/bookmarks/BookmarkListFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.bookmarks;
+package org.mercury_im.messenger.android.ui.roster.bookmarks;
import android.os.Bundle;
import android.view.LayoutInflater;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/AddContactDialogFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java
similarity index 97%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/AddContactDialogFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java
index cca6693..1b7d59e 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/AddContactDialogFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.roster.contacts;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -23,10 +23,10 @@ import com.google.android.material.textfield.TextInputLayout;
import org.jivesoftware.smack.SmackException;
import org.jxmpp.stringprep.XmppStringprepException;
-import org.mercury_im.messenger.Messenger;
+import org.mercury_im.messenger.core.Messenger;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.exception.ContactAlreadyAddedException;
+import org.mercury_im.messenger.core.exception.ContactAlreadyAddedException;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java
index e15b6d7..cdb964c 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.roster.contacts;
import android.content.Context;
import android.os.Bundle;
@@ -7,7 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView;
@@ -16,8 +15,6 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu
import org.mercury_im.messenger.R;
-import javax.inject.Inject;
-
import butterknife.BindView;
import butterknife.ButterKnife;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListItemViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListItemViewModel.java
similarity index 79%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListItemViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListItemViewModel.java
index ea26a71..a003e24 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListItemViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListItemViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.roster.contacts;
import android.app.Application;
@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
-import org.mercury_im.messenger.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.entity.contact.Peer;
import javax.inject.Inject;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java
similarity index 89%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java
index 77e6adf..9e9a642 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.roster.contacts;
import android.content.Context;
import android.content.Intent;
@@ -13,11 +13,9 @@ import androidx.recyclerview.widget.RecyclerView;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.ui.avatar.AvatarDrawable;
-import org.mercury_im.messenger.ui.chat.ChatActivity;
-import org.mercury_im.messenger.ui.roster.contacts.detail.ContactDetailActivity;
-import org.mercury_im.messenger.ui.util.AbstractRecyclerViewAdapter;
-import org.mercury_im.messenger.util.ColorUtil;
+import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable;
+import org.mercury_im.messenger.android.ui.roster.contacts.detail.ContactDetailActivity;
+import org.mercury_im.messenger.android.ui.util.AbstractRecyclerViewAdapter;
import java.util.Objects;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListViewModel.java
similarity index 91%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListViewModel.java
index 5ddfb8a..3b8068e 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/ContactListViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.roster.contacts;
import android.util.Log;
@@ -6,8 +6,8 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
-import org.mercury_im.messenger.MercuryImApplication;
-import org.mercury_im.messenger.Messenger;
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.core.Messenger;
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
import org.mercury_im.messenger.entity.Account;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java
similarity index 92%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailActivity.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java
index 29fd5e8..b2e3ce9 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts.detail;
+package org.mercury_im.messenger.android.ui.roster.contacts.detail;
import android.os.Bundle;
import android.widget.FrameLayout;
@@ -7,7 +7,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
-import org.mercury_im.messenger.MercuryImApplication;
+import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
import java.util.UUID;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java
similarity index 96%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java
index 372f7c4..458e8ae 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts.detail;
+package org.mercury_im.messenger.android.ui.roster.contacts.detail;
import android.app.AlertDialog;
import android.content.Context;
@@ -23,10 +23,10 @@ import com.google.android.material.chip.Chip;
import com.google.android.material.chip.ChipGroup;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
-import org.mercury_im.messenger.Messenger;
+import org.mercury_im.messenger.core.Messenger;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.ui.chat.ChatActivity;
-import org.mercury_im.messenger.util.ColorUtil;
+import org.mercury_im.messenger.android.ui.chat.ChatActivity;
+import org.mercury_im.messenger.android.util.ColorUtil;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java
similarity index 94%
rename from app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java
index db4524e..d4ca519 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/contacts/detail/ContactDetailViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.roster.contacts.detail;
+package org.mercury_im.messenger.android.ui.roster.contacts.detail;
import android.graphics.drawable.Drawable;
import android.util.Log;
@@ -7,7 +7,6 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
-import org.jivesoftware.smack.PresenceListener;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
@@ -18,18 +17,17 @@ import org.jivesoftware.smack.roster.RosterGroup;
import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.Jid;
import org.jxmpp.jid.impl.JidCreate;
-import org.mercury_im.messenger.MercuryImApplication;
-import org.mercury_im.messenger.Messenger;
-import org.mercury_im.messenger.data.repository.PeerRepository;
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.core.Messenger;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.ui.avatar.AvatarDrawable;
-import org.mercury_im.messenger.util.CombinedPresenceListener;
+import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable;
+import org.mercury_im.messenger.core.util.CombinedPresenceListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
-import java.util.stream.Collectors;
import javax.inject.Inject;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/package-info.java
new file mode 100644
index 0000000..3a8ce3d
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.roster;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/AppCompatPreferenceActivity.java
similarity index 98%
rename from app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/settings/AppCompatPreferenceActivity.java
index 264543a..3aef71a 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/AppCompatPreferenceActivity.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.settings;
+package org.mercury_im.messenger.android.ui.settings;
import android.content.res.Configuration;
import android.os.Bundle;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/SettingsActivity.java
similarity index 99%
rename from app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/settings/SettingsActivity.java
index 59a99a0..4ef250c 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/SettingsActivity.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.settings;
+package org.mercury_im.messenger.android.ui.settings;
import android.annotation.TargetApi;
import android.content.Context;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/settings/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/package-info.java
new file mode 100644
index 0000000..25ee792
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/settings/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.settings;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/util/AbstractRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/util/AbstractRecyclerViewAdapter.java
similarity index 98%
rename from app/src/main/java/org/mercury_im/messenger/ui/util/AbstractRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/util/AbstractRecyclerViewAdapter.java
index 8301ff9..6552ed3 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/util/AbstractRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/util/AbstractRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.util;
+package org.mercury_im.messenger.android.ui.util;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/util/MessageBackgroundDrawable.java b/app/src/main/java/org/mercury_im/messenger/android/ui/util/MessageBackgroundDrawable.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/ui/util/MessageBackgroundDrawable.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/util/MessageBackgroundDrawable.java
index 41597a5..95db30e 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/util/MessageBackgroundDrawable.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/util/MessageBackgroundDrawable.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.ui.util;
+package org.mercury_im.messenger.android.ui.util;
import org.mercury_im.messenger.R;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/util/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/ui/util/package-info.java
new file mode 100644
index 0000000..ce04e06
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/util/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Some Javadoc information about the package.
+ */
+package org.mercury_im.messenger.android.ui.util;
diff --git a/app/src/main/java/org/mercury_im/messenger/util/AbstractActivityLifecycleCallbacks.java b/app/src/main/java/org/mercury_im/messenger/android/util/AbstractActivityLifecycleCallbacks.java
similarity index 94%
rename from app/src/main/java/org/mercury_im/messenger/util/AbstractActivityLifecycleCallbacks.java
rename to app/src/main/java/org/mercury_im/messenger/android/util/AbstractActivityLifecycleCallbacks.java
index 7eefa8e..6650a9e 100644
--- a/app/src/main/java/org/mercury_im/messenger/util/AbstractActivityLifecycleCallbacks.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/AbstractActivityLifecycleCallbacks.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.android.util;
import android.app.Activity;
import android.app.Application;
diff --git a/app/src/main/java/org/mercury_im/messenger/util/AbstractDiffCallback.java b/app/src/main/java/org/mercury_im/messenger/android/util/AbstractDiffCallback.java
similarity index 92%
rename from app/src/main/java/org/mercury_im/messenger/util/AbstractDiffCallback.java
rename to app/src/main/java/org/mercury_im/messenger/android/util/AbstractDiffCallback.java
index 75344e6..deb37fa 100644
--- a/app/src/main/java/org/mercury_im/messenger/util/AbstractDiffCallback.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/AbstractDiffCallback.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.android.util;
import androidx.recyclerview.widget.DiffUtil;
diff --git a/app/src/main/java/org/mercury_im/messenger/util/ColorUtil.java b/app/src/main/java/org/mercury_im/messenger/android/util/ColorUtil.java
similarity index 99%
rename from app/src/main/java/org/mercury_im/messenger/util/ColorUtil.java
rename to app/src/main/java/org/mercury_im/messenger/android/util/ColorUtil.java
index 9414e64..952716e 100644
--- a/app/src/main/java/org/mercury_im/messenger/util/ColorUtil.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/ColorUtil.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.android.util;
import androidx.annotation.ColorInt;
diff --git a/app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java b/app/src/main/java/org/mercury_im/messenger/android/util/TextChangedListener.java
similarity index 87%
rename from app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java
rename to app/src/main/java/org/mercury_im/messenger/android/util/TextChangedListener.java
index c38f7a1..ad2c6ce 100644
--- a/app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/TextChangedListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.android.util;
import android.text.Editable;
import android.text.TextWatcher;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/package-info.java b/app/src/main/java/org/mercury_im/messenger/android/util/package-info.java
similarity index 53%
rename from app/src/main/java/org/mercury_im/messenger/ui/account/package-info.java
rename to app/src/main/java/org/mercury_im/messenger/android/util/package-info.java
index 270cacb..b1b268b 100644
--- a/app/src/main/java/org/mercury_im/messenger/ui/account/package-info.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/package-info.java
@@ -1,4 +1,4 @@
/**
* Some Javadoc information about the package.
*/
-package org.mercury_im.messenger.ui.account;
+package org.mercury_im.messenger.android.util;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/package-info.java b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/package-info.java
deleted file mode 100644
index eaecd2e..0000000
--- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.ui.chatlist;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/package-info.java b/app/src/main/java/org/mercury_im/messenger/ui/package-info.java
deleted file mode 100644
index 8c4f7b2..0000000
--- a/app/src/main/java/org/mercury_im/messenger/ui/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.ui;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/package-info.java b/app/src/main/java/org/mercury_im/messenger/ui/roster/package-info.java
deleted file mode 100644
index 62d19ba..0000000
--- a/app/src/main/java/org/mercury_im/messenger/ui/roster/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.ui.roster;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/settings/package-info.java b/app/src/main/java/org/mercury_im/messenger/ui/settings/package-info.java
deleted file mode 100644
index 5ab3dde..0000000
--- a/app/src/main/java/org/mercury_im/messenger/ui/settings/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.ui.settings;
diff --git a/app/src/main/java/org/mercury_im/messenger/ui/util/package-info.java b/app/src/main/java/org/mercury_im/messenger/ui/util/package-info.java
deleted file mode 100644
index a130fb6..0000000
--- a/app/src/main/java/org/mercury_im/messenger/ui/util/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.ui.util;
diff --git a/app/src/main/java/org/mercury_im/messenger/util/package-info.java b/app/src/main/java/org/mercury_im/messenger/util/package-info.java
deleted file mode 100644
index d374b05..0000000
--- a/app/src/main/java/org/mercury_im/messenger/util/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Some Javadoc information about the package.
- */
-package org.mercury_im.messenger.util;
diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml
index d09480c..9faa439 100644
--- a/app/src/main/res/layout/activity_chat.xml
+++ b/app/src/main/res/layout/activity_chat.xml
@@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.chat.ChatActivity">
+ tools:context=".android.ui.chat.ChatActivity">
+ tools:context=".android.ui.MainActivity">
+ tools:context=".android.ui.chatlist.ChatListFragment"/>
+ tools:context=".android.ui.roster.contacts.ContactListFragment"/>
+ tools:context=".android.ui.chat.ChatActivity">
-
+ tools:context=".android.ui.MainActivity">
-
diff --git a/app/src/test/java/org/mercury_im/messenger/ExampleUnitTest.java b/app/src/test/java/org/mercury_im/messenger/ExampleUnitTest.java
index 3977c6f..f1f5819 100644
--- a/app/src/test/java/org/mercury_im/messenger/ExampleUnitTest.java
+++ b/app/src/test/java/org/mercury_im/messenger/ExampleUnitTest.java
@@ -1,12 +1,6 @@
package org.mercury_im.messenger;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mercury_im.messenger.core.connection.ConnectionState;
-
-import io.reactivex.observers.TestObserver;
-import io.reactivex.schedulers.TestScheduler;
-import io.reactivex.subjects.BehaviorSubject;
import static org.junit.Assert.assertEquals;
@@ -24,12 +18,6 @@ public class ExampleUnitTest {
@Test
public void test() {
- TestScheduler testScheduler = new TestScheduler();
- BehaviorSubject state = BehaviorSubject.createDefault(ConnectionState.DISCONNECTED);
- TestObserver observable = state.test();
- assertEquals(ConnectionState.DISCONNECTED, state.getValue());
- state.onNext(ConnectionState.CONNECTING);
- assertEquals(ConnectionState.CONNECTING, state.getValue());
- observable.assertValues(ConnectionState.DISCONNECTED, ConnectionState.CONNECTING).dispose();
+
}
}
\ No newline at end of file
diff --git a/data/src/main/java/org/mercury_im/messenger/data/di/RepositoryModule.java b/data/src/main/java/org/mercury_im/messenger/data/di/RepositoryModule.java
index 00875cb..e67317b 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/di/RepositoryModule.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/di/RepositoryModule.java
@@ -6,20 +6,20 @@ import org.mercury_im.messenger.data.mapping.EntityCapsMapping;
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
import org.mercury_im.messenger.data.mapping.MessageMapping;
import org.mercury_im.messenger.data.mapping.PeerMapping;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.data.repository.EntityCapsRepository;
-import org.mercury_im.messenger.data.repository.GroupChatRepository;
-import org.mercury_im.messenger.data.repository.MessageRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.EntityCapsRepository;
+import org.mercury_im.messenger.core.data.repository.GroupChatRepository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
import org.mercury_im.messenger.data.repository.XmppEntityCapsRepository;
-import org.mercury_im.messenger.data.repository.Repositories;
+import org.mercury_im.messenger.core.data.repository.Repositories;
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
import org.mercury_im.messenger.data.repository.XmppDirectChatRepository;
import org.mercury_im.messenger.data.repository.XmppGroupChatRepository;
import org.mercury_im.messenger.data.repository.XmppMessageRepository;
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import javax.inject.Named;
import javax.inject.Singleton;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java
index b64142d..9b26d02 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/AbstractMapping.java
@@ -1,6 +1,6 @@
package org.mercury_im.messenger.data.mapping;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import lombok.NonNull;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java
index 922facc..abcc045 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/Mapping.java
@@ -1,6 +1,6 @@
package org.mercury_im.messenger.data.mapping;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
/**
* Interface that defines a mapping between entities and database models.
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/RequeryRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/RequeryRepository.java
index 8b814b2..87861b5 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/RequeryRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/RequeryRepository.java
@@ -1,6 +1,6 @@
package org.mercury_im.messenger.data.repository;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import javax.inject.Named;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java
index 0b250dc..d9dcbb2 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppAccountRepository.java
@@ -1,11 +1,12 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
import org.mercury_im.messenger.data.mapping.AccountMapping;
import org.mercury_im.messenger.data.model.AccountModel;
import org.mercury_im.messenger.data.repository.dao.AccountDao;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.util.Optional;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.Optional;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.ArrayList;
import java.util.List;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java
index bd9a354..32dddb4 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppDirectChatRepository.java
@@ -1,12 +1,13 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
import org.mercury_im.messenger.data.mapping.DirectChatMapping;
import org.mercury_im.messenger.data.model.DirectChatModel;
import org.mercury_im.messenger.data.repository.dao.DirectChatDao;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.ArrayList;
import java.util.List;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppEntityCapsRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppEntityCapsRepository.java
index d76fe95..467585b 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppEntityCapsRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppEntityCapsRepository.java
@@ -1,9 +1,10 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.EntityCapsRepository;
import org.mercury_im.messenger.data.mapping.EntityCapsMapping;
import org.mercury_im.messenger.data.model.EntityCapsModel;
import org.mercury_im.messenger.entity.caps.EntityCapsRecord;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -16,8 +17,6 @@ import io.reactivex.Maybe;
import io.reactivex.Observable;
import io.reactivex.Scheduler;
import io.requery.Persistable;
-import io.requery.query.Expression;
-import io.requery.query.ResultDelegate;
import io.requery.reactivex.ReactiveEntityStore;
import io.requery.reactivex.ReactiveResult;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java
index f3f9c21..bd7bbbe 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppGroupChatRepository.java
@@ -1,12 +1,13 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.GroupChatRepository;
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
import org.mercury_im.messenger.data.model.GroupChatModel;
import org.mercury_im.messenger.data.repository.dao.GroupChatDao;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.GroupChat;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.ArrayList;
import java.util.List;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppMessageRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppMessageRepository.java
index 640051d..0ce58f2 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppMessageRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppMessageRepository.java
@@ -1,5 +1,6 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
import org.mercury_im.messenger.data.mapping.DirectChatMapping;
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
import org.mercury_im.messenger.data.mapping.MessageMapping;
@@ -14,7 +15,7 @@ import org.mercury_im.messenger.data.repository.dao.MessageDao;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.chat.GroupChat;
import org.mercury_im.messenger.entity.message.Message;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.ArrayList;
import java.util.List;
diff --git a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java
index 0187832..ab973ae 100644
--- a/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java
+++ b/data/src/main/java/org/mercury_im/messenger/data/repository/XmppPeerRepository.java
@@ -1,15 +1,15 @@
package org.mercury_im.messenger.data.repository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.data.mapping.PeerMapping;
import org.mercury_im.messenger.data.model.PeerModel;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.entity.contact.SubscriptionDirection;
-import org.mercury_im.messenger.util.Optional;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.Optional;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@@ -22,8 +22,6 @@ import io.reactivex.Observable;
import io.reactivex.Scheduler;
import io.reactivex.Single;
import io.requery.Persistable;
-import io.requery.query.Expression;
-import io.requery.query.LogicalCondition;
import io.requery.query.ResultDelegate;
import io.requery.reactivex.ReactiveEntityStore;
diff --git a/data/src/test/java/org/mercury_im/messenger/data/di/TestingSchedulerModule.java b/data/src/test/java/org/mercury_im/messenger/data/di/TestingSchedulerModule.java
index 4216a43..a96ffc1 100644
--- a/data/src/test/java/org/mercury_im/messenger/data/di/TestingSchedulerModule.java
+++ b/data/src/test/java/org/mercury_im/messenger/data/di/TestingSchedulerModule.java
@@ -1,6 +1,6 @@
package org.mercury_im.messenger.data.di;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import javax.inject.Named;
import javax.inject.Singleton;
diff --git a/domain/src/main/java/org/mercury_im/messenger/ClientStateListener.java b/domain/src/main/java/org/mercury_im/messenger/core/ClientStateListener.java
similarity index 73%
rename from domain/src/main/java/org/mercury_im/messenger/ClientStateListener.java
rename to domain/src/main/java/org/mercury_im/messenger/core/ClientStateListener.java
index 61964d0..e4b3667 100644
--- a/domain/src/main/java/org/mercury_im/messenger/ClientStateListener.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/ClientStateListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.core;
public interface ClientStateListener {
diff --git a/domain/src/main/java/org/mercury_im/messenger/MessageCenter.java b/domain/src/main/java/org/mercury_im/messenger/core/MessageCenter.java
similarity index 75%
rename from domain/src/main/java/org/mercury_im/messenger/MessageCenter.java
rename to domain/src/main/java/org/mercury_im/messenger/core/MessageCenter.java
index 995f780..7fa152f 100644
--- a/domain/src/main/java/org/mercury_im/messenger/MessageCenter.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/MessageCenter.java
@@ -1,6 +1,6 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.core;
-import org.mercury_im.messenger.listener.IncomingDirectMessageListener;
+import org.mercury_im.messenger.core.listener.IncomingDirectMessageListener;
import org.mercury_im.messenger.entity.chat.Chat;
import org.mercury_im.messenger.entity.message.Message;
diff --git a/domain/src/main/java/org/mercury_im/messenger/Messenger.java b/domain/src/main/java/org/mercury_im/messenger/core/Messenger.java
similarity index 92%
rename from domain/src/main/java/org/mercury_im/messenger/Messenger.java
rename to domain/src/main/java/org/mercury_im/messenger/core/Messenger.java
index c0d170b..c73cde3 100644
--- a/domain/src/main/java/org/mercury_im/messenger/Messenger.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/Messenger.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.core;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.SmackException;
@@ -9,12 +9,12 @@ import org.jivesoftware.smack.roster.RosterEntry;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.stringprep.XmppStringprepException;
-import org.mercury_im.messenger.data.repository.Repositories;
+import org.mercury_im.messenger.core.data.repository.Repositories;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.exception.ConnectionNotFoundException;
-import org.mercury_im.messenger.exception.ContactAlreadyAddedException;
-import org.mercury_im.messenger.xmpp.MercuryConnection;
-import org.mercury_im.messenger.xmpp.MercuryConnectionManager;
+import org.mercury_im.messenger.core.exception.ConnectionNotFoundException;
+import org.mercury_im.messenger.core.exception.ContactAlreadyAddedException;
+import org.mercury_im.messenger.core.xmpp.MercuryConnection;
+import org.mercury_im.messenger.core.xmpp.MercuryConnectionManager;
import java.util.UUID;
import java.util.logging.Level;
diff --git a/domain/src/main/java/org/mercury_im/messenger/SchedulersFacade.java b/domain/src/main/java/org/mercury_im/messenger/core/SchedulersFacade.java
similarity index 87%
rename from domain/src/main/java/org/mercury_im/messenger/SchedulersFacade.java
rename to domain/src/main/java/org/mercury_im/messenger/core/SchedulersFacade.java
index 8519713..18312b4 100644
--- a/domain/src/main/java/org/mercury_im/messenger/SchedulersFacade.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/SchedulersFacade.java
@@ -1,6 +1,6 @@
-package org.mercury_im.messenger;
+package org.mercury_im.messenger.core;
-import org.mercury_im.messenger.util.ThreadUtils;
+import org.mercury_im.messenger.core.util.ThreadUtils;
import javax.inject.Inject;
import javax.inject.Named;
diff --git a/domain/src/main/java/org/mercury_im/messenger/account/error/PasswordError.java b/domain/src/main/java/org/mercury_im/messenger/core/account/error/PasswordError.java
similarity index 57%
rename from domain/src/main/java/org/mercury_im/messenger/account/error/PasswordError.java
rename to domain/src/main/java/org/mercury_im/messenger/core/account/error/PasswordError.java
index b4573dc..20c883a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/account/error/PasswordError.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/account/error/PasswordError.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.account.error;
+package org.mercury_im.messenger.core.account.error;
public enum PasswordError {
emptyPassword,
diff --git a/domain/src/main/java/org/mercury_im/messenger/account/error/UsernameError.java b/domain/src/main/java/org/mercury_im/messenger/core/account/error/UsernameError.java
similarity index 63%
rename from domain/src/main/java/org/mercury_im/messenger/account/error/UsernameError.java
rename to domain/src/main/java/org/mercury_im/messenger/core/account/error/UsernameError.java
index f02e6c1..168cd99 100644
--- a/domain/src/main/java/org/mercury_im/messenger/account/error/UsernameError.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/account/error/UsernameError.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.account.error;
+package org.mercury_im.messenger.core.account.error;
public enum UsernameError {
emptyUsername,
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/AccountRepository.java
similarity index 92%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/AccountRepository.java
index 38468c2..3e3a7b2 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/AccountRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/AccountRepository.java
@@ -1,7 +1,7 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import java.util.List;
import java.util.UUID;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/DirectChatRepository.java
similarity index 91%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/DirectChatRepository.java
index e15c442..1057915 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/DirectChatRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/DirectChatRepository.java
@@ -1,6 +1,6 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.contact.Peer;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/EntityCapsRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/EntityCapsRepository.java
similarity index 90%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/EntityCapsRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/EntityCapsRepository.java
index 6273464..82b8d6a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/EntityCapsRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/EntityCapsRepository.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
import org.mercury_im.messenger.entity.caps.EntityCapsRecord;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/GroupChatRepository.java
similarity index 94%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/GroupChatRepository.java
index 0c79ef2..861b215 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/GroupChatRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/GroupChatRepository.java
@@ -1,8 +1,8 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.GroupChat;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import java.util.List;
import java.util.UUID;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/MessageRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/MessageRepository.java
similarity index 95%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/MessageRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/MessageRepository.java
index bed2cea..85e473e 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/MessageRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/MessageRepository.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.chat.GroupChat;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/PeerRepository.java
similarity index 91%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/PeerRepository.java
index f06f705..49f5c9a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/PeerRepository.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/PeerRepository.java
@@ -1,7 +1,6 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
-import org.mercury_im.messenger.store.MercuryRosterStore;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.contact.Peer;
diff --git a/domain/src/main/java/org/mercury_im/messenger/data/repository/Repositories.java b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/Repositories.java
similarity index 96%
rename from domain/src/main/java/org/mercury_im/messenger/data/repository/Repositories.java
rename to domain/src/main/java/org/mercury_im/messenger/core/data/repository/Repositories.java
index d302f23..0ca68e0 100644
--- a/domain/src/main/java/org/mercury_im/messenger/data/repository/Repositories.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/data/repository/Repositories.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.data.repository;
+package org.mercury_im.messenger.core.data.repository;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/domain/src/main/java/org/mercury_im/messenger/di/module/ViewModelModule.java b/domain/src/main/java/org/mercury_im/messenger/core/di/module/ViewModelModule.java
similarity index 76%
rename from domain/src/main/java/org/mercury_im/messenger/di/module/ViewModelModule.java
rename to domain/src/main/java/org/mercury_im/messenger/core/di/module/ViewModelModule.java
index 8a387f6..72f951f 100644
--- a/domain/src/main/java/org/mercury_im/messenger/di/module/ViewModelModule.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/di/module/ViewModelModule.java
@@ -1,10 +1,10 @@
-package org.mercury_im.messenger.di.module;
+package org.mercury_im.messenger.core.di.module;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.util.ThreadUtils;
-import org.mercury_im.messenger.viewmodel.accounts.AccountsViewModel;
-import org.mercury_im.messenger.viewmodel.accounts.LoginViewModel;
-import org.mercury_im.messenger.xmpp.MercuryConnectionManager;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.util.ThreadUtils;
+import org.mercury_im.messenger.core.viewmodel.accounts.AccountsViewModel;
+import org.mercury_im.messenger.core.viewmodel.accounts.LoginViewModel;
+import org.mercury_im.messenger.core.xmpp.MercuryConnectionManager;
import javax.inject.Named;
import javax.inject.Singleton;
diff --git a/domain/src/main/java/org/mercury_im/messenger/exception/ConnectionNotFoundException.java b/domain/src/main/java/org/mercury_im/messenger/core/exception/ConnectionNotFoundException.java
similarity index 87%
rename from domain/src/main/java/org/mercury_im/messenger/exception/ConnectionNotFoundException.java
rename to domain/src/main/java/org/mercury_im/messenger/core/exception/ConnectionNotFoundException.java
index 1aee554..bd9dea4 100644
--- a/domain/src/main/java/org/mercury_im/messenger/exception/ConnectionNotFoundException.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/exception/ConnectionNotFoundException.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.exception;
+package org.mercury_im.messenger.core.exception;
import java.util.UUID;
diff --git a/domain/src/main/java/org/mercury_im/messenger/exception/ContactAlreadyAddedException.java b/domain/src/main/java/org/mercury_im/messenger/core/exception/ContactAlreadyAddedException.java
similarity index 86%
rename from domain/src/main/java/org/mercury_im/messenger/exception/ContactAlreadyAddedException.java
rename to domain/src/main/java/org/mercury_im/messenger/core/exception/ContactAlreadyAddedException.java
index 2f9b30b..3ee148d 100644
--- a/domain/src/main/java/org/mercury_im/messenger/exception/ContactAlreadyAddedException.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/exception/ContactAlreadyAddedException.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.exception;
+package org.mercury_im.messenger.core.exception;
import org.jxmpp.jid.Jid;
diff --git a/domain/src/main/java/org/mercury_im/messenger/exception/IllegalUsernameException.java b/domain/src/main/java/org/mercury_im/messenger/core/exception/IllegalUsernameException.java
similarity index 75%
rename from domain/src/main/java/org/mercury_im/messenger/exception/IllegalUsernameException.java
rename to domain/src/main/java/org/mercury_im/messenger/core/exception/IllegalUsernameException.java
index 6e084dc..fcc0891 100644
--- a/domain/src/main/java/org/mercury_im/messenger/exception/IllegalUsernameException.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/exception/IllegalUsernameException.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.exception;
+package org.mercury_im.messenger.core.exception;
public class IllegalUsernameException extends RuntimeException {
diff --git a/domain/src/main/java/org/mercury_im/messenger/listener/IncomingDirectMessageListener.java b/domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingDirectMessageListener.java
similarity index 86%
rename from domain/src/main/java/org/mercury_im/messenger/listener/IncomingDirectMessageListener.java
rename to domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingDirectMessageListener.java
index 3facc87..e87850a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/listener/IncomingDirectMessageListener.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingDirectMessageListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.listener;
+package org.mercury_im.messenger.core.listener;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.DirectChat;
diff --git a/domain/src/main/java/org/mercury_im/messenger/listener/IncomingGroupChatMessageListener.java b/domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingGroupChatMessageListener.java
similarity index 86%
rename from domain/src/main/java/org/mercury_im/messenger/listener/IncomingGroupChatMessageListener.java
rename to domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingGroupChatMessageListener.java
index 3fc9af3..4ab16de 100644
--- a/domain/src/main/java/org/mercury_im/messenger/listener/IncomingGroupChatMessageListener.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/listener/IncomingGroupChatMessageListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.listener;
+package org.mercury_im.messenger.core.listener;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.GroupChat;
diff --git a/domain/src/main/java/org/mercury_im/messenger/listener/TypingEventListener.java b/domain/src/main/java/org/mercury_im/messenger/core/listener/TypingEventListener.java
similarity index 82%
rename from domain/src/main/java/org/mercury_im/messenger/listener/TypingEventListener.java
rename to domain/src/main/java/org/mercury_im/messenger/core/listener/TypingEventListener.java
index 3d8e037..a4a39cc 100644
--- a/domain/src/main/java/org/mercury_im/messenger/listener/TypingEventListener.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/listener/TypingEventListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.listener;
+package org.mercury_im.messenger.core.listener;
import org.mercury_im.messenger.entity.chat.Chat;
import org.mercury_im.messenger.entity.event.TypingEvent;
diff --git a/domain/src/main/java/org/mercury_im/messenger/logging/Tags.java b/domain/src/main/java/org/mercury_im/messenger/core/logging/Tags.java
similarity index 84%
rename from domain/src/main/java/org/mercury_im/messenger/logging/Tags.java
rename to domain/src/main/java/org/mercury_im/messenger/core/logging/Tags.java
index 6ace309..5543533 100644
--- a/domain/src/main/java/org/mercury_im/messenger/logging/Tags.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/logging/Tags.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.logging;
+package org.mercury_im.messenger.core.logging;
public class Tags {
diff --git a/domain/src/main/java/org/mercury_im/messenger/store/MercuryEntityCapsStore.java b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryEntityCapsStore.java
similarity index 90%
rename from domain/src/main/java/org/mercury_im/messenger/store/MercuryEntityCapsStore.java
rename to domain/src/main/java/org/mercury_im/messenger/core/store/MercuryEntityCapsStore.java
index e86495c..b3b75fd 100644
--- a/domain/src/main/java/org/mercury_im/messenger/store/MercuryEntityCapsStore.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryEntityCapsStore.java
@@ -1,13 +1,12 @@
-package org.mercury_im.messenger.store;
+package org.mercury_im.messenger.core.store;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smackx.caps.cache.EntityCapsPersistentCache;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
-import org.mercury_im.messenger.SchedulersFacade;
-import org.mercury_im.messenger.data.repository.EntityCapsRepository;
+import org.mercury_im.messenger.core.data.repository.EntityCapsRepository;
import org.mercury_im.messenger.entity.caps.EntityCapsRecord;
-import org.mercury_im.messenger.logging.Tags;
+import org.mercury_im.messenger.core.logging.Tags;
import java.io.StringReader;
import java.util.logging.Level;
@@ -17,7 +16,6 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
@Singleton
public class MercuryEntityCapsStore implements EntityCapsPersistentCache {
diff --git a/domain/src/main/java/org/mercury_im/messenger/store/MercuryMessageStore.java b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryMessageStore.java
similarity index 93%
rename from domain/src/main/java/org/mercury_im/messenger/store/MercuryMessageStore.java
rename to domain/src/main/java/org/mercury_im/messenger/core/store/MercuryMessageStore.java
index 99c4580..2208164 100644
--- a/domain/src/main/java/org/mercury_im/messenger/store/MercuryMessageStore.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryMessageStore.java
@@ -1,13 +1,13 @@
-package org.mercury_im.messenger.store;
+package org.mercury_im.messenger.core.store;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.chat2.OutgoingChatMessageListener;
import org.jivesoftware.smack.packet.MessageBuilder;
import org.jivesoftware.smackx.delay.packet.DelayInformation;
import org.jxmpp.jid.EntityBareJid;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
-import org.mercury_im.messenger.data.repository.MessageRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.message.Message;
import org.mercury_im.messenger.entity.message.MessageDirection;
diff --git a/domain/src/main/java/org/mercury_im/messenger/store/MercuryRosterStore.java b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryRosterStore.java
similarity index 97%
rename from domain/src/main/java/org/mercury_im/messenger/store/MercuryRosterStore.java
rename to domain/src/main/java/org/mercury_im/messenger/core/store/MercuryRosterStore.java
index 2d9da68..fb87a9d 100644
--- a/domain/src/main/java/org/mercury_im/messenger/store/MercuryRosterStore.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/store/MercuryRosterStore.java
@@ -1,15 +1,15 @@
-package org.mercury_im.messenger.store;
+package org.mercury_im.messenger.core.store;
import org.jivesoftware.smack.roster.packet.RosterPacket;
import org.jivesoftware.smack.roster.rosterstore.RosterStore;
import org.jxmpp.jid.Jid;
import org.jxmpp.jid.impl.JidCreate;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.entity.contact.SubscriptionDirection;
-import org.mercury_im.messenger.util.Optional;
+import org.mercury_im.messenger.core.util.Optional;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/domain/src/main/java/org/mercury_im/messenger/usecase/RosterStoreBinder.java b/domain/src/main/java/org/mercury_im/messenger/core/usecase/RosterStoreBinder.java
similarity index 91%
rename from domain/src/main/java/org/mercury_im/messenger/usecase/RosterStoreBinder.java
rename to domain/src/main/java/org/mercury_im/messenger/core/usecase/RosterStoreBinder.java
index d826042..03bbf92 100644
--- a/domain/src/main/java/org/mercury_im/messenger/usecase/RosterStoreBinder.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/usecase/RosterStoreBinder.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.usecase;
+package org.mercury_im.messenger.core.usecase;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.roster.PresenceEventListener;
@@ -7,19 +7,16 @@ import org.jivesoftware.smack.roster.RosterEntry;
import org.jivesoftware.smack.roster.RosterListener;
import org.jivesoftware.smack.roster.RosterLoadedListener;
import org.jivesoftware.smack.roster.SubscribeListener;
-import org.jivesoftware.smack.roster.rosterstore.RosterStore;
import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.FullJid;
import org.jxmpp.jid.Jid;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
-import org.mercury_im.messenger.store.MercuryRosterStore;
-import org.mercury_im.messenger.xmpp.MercuryConnection;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.store.MercuryRosterStore;
+import org.mercury_im.messenger.core.xmpp.MercuryConnection;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/domain/src/main/java/org/mercury_im/messenger/util/CombinedPresenceListener.java b/domain/src/main/java/org/mercury_im/messenger/core/util/CombinedPresenceListener.java
similarity index 96%
rename from domain/src/main/java/org/mercury_im/messenger/util/CombinedPresenceListener.java
rename to domain/src/main/java/org/mercury_im/messenger/core/util/CombinedPresenceListener.java
index d5ef8d2..6da7af7 100644
--- a/domain/src/main/java/org/mercury_im/messenger/util/CombinedPresenceListener.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/util/CombinedPresenceListener.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.core.util;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.roster.PresenceEventListener;
diff --git a/domain/src/main/java/org/mercury_im/messenger/util/DiffUtil.java b/domain/src/main/java/org/mercury_im/messenger/core/util/DiffUtil.java
similarity index 97%
rename from domain/src/main/java/org/mercury_im/messenger/util/DiffUtil.java
rename to domain/src/main/java/org/mercury_im/messenger/core/util/DiffUtil.java
index ee472d7..fda40a2 100644
--- a/domain/src/main/java/org/mercury_im/messenger/util/DiffUtil.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/util/DiffUtil.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.core.util;
import java.util.ArrayList;
import java.util.List;
diff --git a/domain/src/main/java/org/mercury_im/messenger/util/Optional.java b/domain/src/main/java/org/mercury_im/messenger/core/util/Optional.java
similarity index 90%
rename from domain/src/main/java/org/mercury_im/messenger/util/Optional.java
rename to domain/src/main/java/org/mercury_im/messenger/core/util/Optional.java
index 4fae342..18201f1 100644
--- a/domain/src/main/java/org/mercury_im/messenger/util/Optional.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/util/Optional.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.core.util;
/**
* Since j.u.Optional is only available on Android since API lvl 24, we need this utility class.
diff --git a/domain/src/main/java/org/mercury_im/messenger/util/ThreadUtils.java b/domain/src/main/java/org/mercury_im/messenger/core/util/ThreadUtils.java
similarity index 90%
rename from domain/src/main/java/org/mercury_im/messenger/util/ThreadUtils.java
rename to domain/src/main/java/org/mercury_im/messenger/core/util/ThreadUtils.java
index 4a3e3c3..148f4a2 100644
--- a/domain/src/main/java/org/mercury_im/messenger/util/ThreadUtils.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/util/ThreadUtils.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.util;
+package org.mercury_im.messenger.core.util;
/**
* Names for identifying scheduler instances during dependency injection.
diff --git a/domain/src/main/java/org/mercury_im/messenger/viewmodel/MercuryViewModel.java b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/MercuryViewModel.java
similarity index 88%
rename from domain/src/main/java/org/mercury_im/messenger/viewmodel/MercuryViewModel.java
rename to domain/src/main/java/org/mercury_im/messenger/core/viewmodel/MercuryViewModel.java
index 6d060d4..260e91b 100644
--- a/domain/src/main/java/org/mercury_im/messenger/viewmodel/MercuryViewModel.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/MercuryViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.viewmodel;
+package org.mercury_im.messenger.core.viewmodel;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
diff --git a/domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/AccountsViewModel.java b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/AccountsViewModel.java
similarity index 84%
rename from domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/AccountsViewModel.java
rename to domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/AccountsViewModel.java
index c0fea4d..61467b2 100644
--- a/domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/AccountsViewModel.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/AccountsViewModel.java
@@ -1,11 +1,11 @@
-package org.mercury_im.messenger.viewmodel.accounts;
+package org.mercury_im.messenger.core.viewmodel.accounts;
-import org.mercury_im.messenger.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.viewmodel.MercuryViewModel;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.util.ThreadUtils;
-import org.mercury_im.messenger.viewmodel.MercuryViewModel;
-import org.mercury_im.messenger.xmpp.MercuryConnectionManager;
-import org.mercury_im.messenger.xmpp.state.ConnectionPoolState;
+import org.mercury_im.messenger.core.util.ThreadUtils;
+import org.mercury_im.messenger.core.xmpp.MercuryConnectionManager;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionPoolState;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/LoginViewModel.java b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/LoginViewModel.java
similarity index 88%
rename from domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/LoginViewModel.java
rename to domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/LoginViewModel.java
index 502bddd..f24acfd 100644
--- a/domain/src/main/java/org/mercury_im/messenger/viewmodel/accounts/LoginViewModel.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/viewmodel/accounts/LoginViewModel.java
@@ -1,20 +1,20 @@
-package org.mercury_im.messenger.viewmodel.accounts;
+package org.mercury_im.messenger.core.viewmodel.accounts;
import org.jivesoftware.smack.util.StringUtils;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.stringprep.XmppStringprepException;
-import org.mercury_im.messenger.account.error.PasswordError;
-import org.mercury_im.messenger.account.error.UsernameError;
-import org.mercury_im.messenger.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.account.error.PasswordError;
+import org.mercury_im.messenger.core.account.error.UsernameError;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.viewmodel.MercuryViewModel;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.util.Optional;
-import org.mercury_im.messenger.util.ThreadUtils;
-import org.mercury_im.messenger.viewmodel.MercuryViewModel;
-import org.mercury_im.messenger.xmpp.MercuryConnection;
-import org.mercury_im.messenger.xmpp.MercuryConnectionManager;
-import org.mercury_im.messenger.xmpp.exception.InvalidCredentialsException;
-import org.mercury_im.messenger.xmpp.exception.ServerUnreachableException;
+import org.mercury_im.messenger.core.util.Optional;
+import org.mercury_im.messenger.core.util.ThreadUtils;
+import org.mercury_im.messenger.core.xmpp.MercuryConnection;
+import org.mercury_im.messenger.core.xmpp.MercuryConnectionManager;
+import org.mercury_im.messenger.core.xmpp.exception.InvalidCredentialsException;
+import org.mercury_im.messenger.core.xmpp.exception.ServerUnreachableException;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/CsiManager.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/CsiManager.java
similarity index 94%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/CsiManager.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/CsiManager.java
index 183d08c..3881ba0 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/CsiManager.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/CsiManager.java
@@ -1,8 +1,8 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smackx.csi.ClientStateIndicationManager;
-import org.mercury_im.messenger.ClientStateListener;
+import org.mercury_im.messenger.core.ClientStateListener;
import java.util.logging.Level;
import java.util.logging.Logger;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnection.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnection.java
similarity index 93%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnection.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnection.java
index c562b62..8f56dce 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnection.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnection.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.ConnectionListener;
@@ -8,12 +8,11 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.sasl.SASLErrorException;
-import org.jivesoftware.smackx.carbons.CarbonManager;
+import org.mercury_im.messenger.core.xmpp.exception.InvalidCredentialsException;
+import org.mercury_im.messenger.core.xmpp.exception.ServerUnreachableException;
+import org.mercury_im.messenger.core.xmpp.state.ConnectivityState;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.xmpp.exception.InvalidCredentialsException;
-import org.mercury_im.messenger.xmpp.exception.ServerUnreachableException;
-import org.mercury_im.messenger.xmpp.state.ConnectionState;
-import org.mercury_im.messenger.xmpp.state.ConnectivityState;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionState;
import java.io.IOException;
import java.util.UUID;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnectionManager.java
similarity index 89%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnectionManager.java
index 90b2fd9..62da429 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/MercuryConnectionManager.java
@@ -1,19 +1,19 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jivesoftware.smackx.caps.EntityCapsManager;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
-import org.mercury_im.messenger.data.repository.MessageRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
-import org.mercury_im.messenger.data.repository.Repositories;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.Repositories;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionPoolState;
import org.mercury_im.messenger.entity.Account;
-import org.mercury_im.messenger.store.MercuryEntityCapsStore;
-import org.mercury_im.messenger.store.MercuryMessageStore;
-import org.mercury_im.messenger.usecase.RosterStoreBinder;
-import org.mercury_im.messenger.util.Optional;
-import org.mercury_im.messenger.xmpp.state.ConnectionPoolState;
-import org.mercury_im.messenger.xmpp.state.ConnectionState;
+import org.mercury_im.messenger.core.store.MercuryEntityCapsStore;
+import org.mercury_im.messenger.core.store.MercuryMessageStore;
+import org.mercury_im.messenger.core.usecase.RosterStoreBinder;
+import org.mercury_im.messenger.core.util.Optional;
+import org.mercury_im.messenger.core.xmpp.state.ConnectionState;
import java.util.ArrayList;
import java.util.List;
@@ -208,4 +208,9 @@ public class MercuryConnectionManager {
return new ConnectionPoolState(states);
}
+ public void doShutdownAllConnections() {
+ for (MercuryConnection connection : getConnections()) {
+ connection.doShutdown();
+ }
+ }
}
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/SmackConfig.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/SmackConfig.java
similarity index 95%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/SmackConfig.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/SmackConfig.java
index 4027424..f348546 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/SmackConfig.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/SmackConfig.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.ReconnectionManager;
import org.jivesoftware.smack.roster.Roster;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/XmppConnectionFactory.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppConnectionFactory.java
similarity index 77%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/XmppConnectionFactory.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppConnectionFactory.java
index 2126bca..2720bdc 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/XmppConnectionFactory.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppConnectionFactory.java
@@ -1,16 +1,12 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
-import org.jxmpp.jid.impl.JidCreate;
+import org.jivesoftware.smack.util.TLSUtils;
import org.jxmpp.stringprep.XmppStringprepException;
import org.mercury_im.messenger.entity.Account;
-import java.security.NoSuchAlgorithmException;
-
-import javax.net.ssl.SSLContext;
-
public class XmppConnectionFactory {
private static final int CONNECTION_TIMEOUT = 30 * 1000;
@@ -19,8 +15,8 @@ public class XmppConnectionFactory {
try {
XMPPTCPConnectionConfiguration.Builder configBuilder =
XMPPTCPConnectionConfiguration.builder()
- .setConnectTimeout(CONNECTION_TIMEOUT)
- .setXmppAddressAndPassword(account.getAddress(), account.getPassword());
+ .setConnectTimeout(CONNECTION_TIMEOUT)
+ .setXmppAddressAndPassword(account.getAddress(), account.getPassword());
if (account.getHost() != null) {
configBuilder.setHost(account.getHost());
}
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/XmppDirectMessageCenter.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppDirectMessageCenter.java
similarity index 85%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/XmppDirectMessageCenter.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppDirectMessageCenter.java
index d89e48b..968e93e 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/XmppDirectMessageCenter.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/XmppDirectMessageCenter.java
@@ -1,27 +1,24 @@
-package org.mercury_im.messenger.xmpp;
+package org.mercury_im.messenger.core.xmpp;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.packet.MessageBuilder;
-import org.jivesoftware.smack.packet.id.StandardStanzaIdSource;
-import org.jivesoftware.smack.packet.id.UuidStanzaIdSource;
import org.jivesoftware.smackx.sid.element.OriginIdElement;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
-import org.mercury_im.messenger.MessageCenter;
-import org.mercury_im.messenger.Messenger;
-import org.mercury_im.messenger.data.repository.AccountRepository;
-import org.mercury_im.messenger.data.repository.DirectChatRepository;
-import org.mercury_im.messenger.data.repository.MessageRepository;
-import org.mercury_im.messenger.data.repository.PeerRepository;
-import org.mercury_im.messenger.data.repository.Repositories;
+import org.mercury_im.messenger.core.MessageCenter;
+import org.mercury_im.messenger.core.Messenger;
+import org.mercury_im.messenger.core.data.repository.AccountRepository;
+import org.mercury_im.messenger.core.data.repository.DirectChatRepository;
+import org.mercury_im.messenger.core.data.repository.MessageRepository;
+import org.mercury_im.messenger.core.data.repository.PeerRepository;
+import org.mercury_im.messenger.core.data.repository.Repositories;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.entity.chat.DirectChat;
import org.mercury_im.messenger.entity.message.Message;
-import org.mercury_im.messenger.entity.message.MessageMetadata;
-import org.mercury_im.messenger.listener.IncomingDirectMessageListener;
+import org.mercury_im.messenger.core.listener.IncomingDirectMessageListener;
import java.util.LinkedHashSet;
import java.util.Set;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/exception/InvalidCredentialsException.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/InvalidCredentialsException.java
similarity index 80%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/exception/InvalidCredentialsException.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/InvalidCredentialsException.java
index b15b0f4..286d05a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/exception/InvalidCredentialsException.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/InvalidCredentialsException.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp.exception;
+package org.mercury_im.messenger.core.xmpp.exception;
public class InvalidCredentialsException extends Exception {
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/exception/ServerUnreachableException.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/ServerUnreachableException.java
similarity index 80%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/exception/ServerUnreachableException.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/ServerUnreachableException.java
index 4d505b2..07329cf 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/exception/ServerUnreachableException.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/exception/ServerUnreachableException.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp.exception;
+package org.mercury_im.messenger.core.xmpp.exception;
public class ServerUnreachableException extends Exception {
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionPoolState.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionPoolState.java
similarity index 95%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionPoolState.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionPoolState.java
index 189e8d6..7135ed0 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionPoolState.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionPoolState.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp.state;
+package org.mercury_im.messenger.core.xmpp.state;
import java.util.Iterator;
import java.util.Map;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionState.java
similarity index 85%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionState.java
index b825286..d8b1963 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectionState.java
@@ -1,6 +1,6 @@
-package org.mercury_im.messenger.xmpp.state;
+package org.mercury_im.messenger.core.xmpp.state;
-import org.mercury_im.messenger.xmpp.MercuryConnection;
+import org.mercury_im.messenger.core.xmpp.MercuryConnection;
import java.util.UUID;
diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectivityState.java b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectivityState.java
similarity index 67%
rename from domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectivityState.java
rename to domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectivityState.java
index 8ff820e..dba744a 100644
--- a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectivityState.java
+++ b/domain/src/main/java/org/mercury_im/messenger/core/xmpp/state/ConnectivityState.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.xmpp.state;
+package org.mercury_im.messenger.core.xmpp.state;
public enum ConnectivityState {
disconnected,