diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 844307c..2d79768 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,7 +33,8 @@
-
+
+
diff --git a/app/src/main/java/org/mercury_im/messenger/android/Notifications.java b/app/src/main/java/org/mercury_im/messenger/android/Notifications.java
index b5061f6..23b9c1a 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/Notifications.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/Notifications.java
@@ -69,8 +69,7 @@ public class Notifications {
Intent tapAction = new Intent(context, ChatActivity.class);
tapAction.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- tapAction.putExtra(ChatActivity.EXTRA_JID, chat.getPeer().getAddress());
- tapAction.putExtra(ChatActivity.EXTRA_ACCOUNT, chat.getPeer().getAccount().getId());
+ tapAction.putExtra(ChatActivity.EXTRA_CHAT_ID, chat.getId().toString());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, tapAction, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,
diff --git a/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java b/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
index 187d330..014e7da 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/di/component/AppComponent.java
@@ -4,7 +4,7 @@ import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.android.di.module.AndroidDatabaseModule;
import org.mercury_im.messenger.android.di.module.AndroidSchedulersModule;
import org.mercury_im.messenger.android.ui.account.detail.AndroidAccountDetailsViewModel;
-import org.mercury_im.messenger.android.ui.roster.contacts.AndroidContactListViewModel;
+import org.mercury_im.messenger.android.ui.contacts.AndroidContactListViewModel;
import org.mercury_im.messenger.core.di.module.OpenPgpModule;
import org.mercury_im.messenger.core.di.module.RxMercuryMessageStoreFactoryModule;
import org.mercury_im.messenger.core.di.module.RxMercuryRosterStoreFactoryModule;
@@ -26,8 +26,8 @@ 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.AndroidChatViewModel;
import org.mercury_im.messenger.android.ui.chatlist.AndroidChatListViewModel;
-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.android.ui.contacts.detail.ContactDetailActivity;
+import org.mercury_im.messenger.android.ui.contacts.detail.ContactDetailViewModel;
import org.mercury_im.messenger.core.viewmodel.account.LoginViewModel;
import javax.inject.Singleton;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
index 57661bb..0e33f95 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/MainActivity.java
@@ -16,14 +16,14 @@ import com.google.android.material.navigation.NavigationView;
import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.android.ui.account.detail.AccountDetailsFragment;
+import org.mercury_im.messenger.android.ui.account.detail.AccountDetailsActivity;
import org.mercury_im.messenger.android.ui.account.DeleteAccountDialogFragment;
import org.mercury_im.messenger.android.ui.account.OnAccountListItemClickListener;
import org.mercury_im.messenger.android.ui.account.list.AccountListFragment;
import org.mercury_im.messenger.core.data.repository.AccountRepository;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.android.ui.chatlist.ChatListFragment;
-import org.mercury_im.messenger.android.ui.roster.RosterFragment;
+import org.mercury_im.messenger.android.ui.contacts.RosterFragment;
import org.mercury_im.messenger.android.ui.settings.SettingsActivity;
import javax.inject.Inject;
@@ -112,8 +112,9 @@ public class MainActivity extends AppCompatActivity
@Override
public void onAccountListItemClick(Account item) {
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.fragment, new AccountDetailsFragment(item.getId())).commit();
+ Intent intent = new Intent(this, AccountDetailsActivity.class);
+ intent.putExtra(AccountDetailsActivity.EXTRA_ACCOUNT_ID, item.getId().toString());
+ startActivity(intent);
}
@Override
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/MercuryActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/MercuryActivity.java
new file mode 100644
index 0000000..c317b2c
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/MercuryActivity.java
@@ -0,0 +1,17 @@
+package org.mercury_im.messenger.android.ui;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public interface MercuryActivity {
+
+ default Bundle requiredExtras(Bundle savedInstanceState, Intent intent) {
+ if (savedInstanceState == null) {
+ savedInstanceState = intent.getExtras();
+ }
+ if (savedInstanceState == null) {
+ throw new IllegalArgumentException("Missing bundle!");
+ }
+ return savedInstanceState;
+ }
+}
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsActivity.java
new file mode 100644
index 0000000..e2a9dcd
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/account/detail/AccountDetailsActivity.java
@@ -0,0 +1,53 @@
+package org.mercury_im.messenger.android.ui.account.detail;
+
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import org.mercury_im.messenger.R;
+import org.mercury_im.messenger.android.ui.MercuryActivity;
+import org.mercury_im.messenger.android.util.ArgumentUtils;
+
+import java.util.UUID;
+
+import butterknife.ButterKnife;
+import lombok.Value;
+
+public class AccountDetailsActivity extends AppCompatActivity implements MercuryActivity {
+
+ public static final String EXTRA_ACCOUNT_ID = "ACCOUNT_ID";
+
+ private UUID accountId;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //MercuryImApplication.getApplication().getAppComponent().inject(this);
+
+ Arguments arguments = getArguments(savedInstanceState);
+ accountId = arguments.getAccountId();
+
+ bindUiComponents();
+ }
+
+ private void bindUiComponents() {
+ setContentView(R.layout.activity_fragment_container);
+ ButterKnife.bind(this);
+
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.fragment, new AccountDetailsFragment(accountId), "account_details")
+ .commit();
+ }
+
+ private Arguments getArguments(Bundle bundle) {
+ bundle = requiredExtras(bundle, getIntent());
+ UUID accountId = ArgumentUtils.requireUUID(bundle, EXTRA_ACCOUNT_ID);
+ return new Arguments(accountId);
+ }
+
+ @Value
+ private class Arguments {
+ UUID accountId;
+ }
+}
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/bookmarks/BookmarkListFragment.java
similarity index 94%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/bookmarks/BookmarkListFragment.java
index c79eebc..5a30e44 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/bookmarks/BookmarkListFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/bookmarks/BookmarkListFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster.bookmarks;
+package org.mercury_im.messenger.android.ui.bookmarks;
import android.os.Bundle;
import android.view.LayoutInflater;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/chat/AndroidChatViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/AndroidChatViewModel.java
index aee1318..665396d 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/chat/AndroidChatViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/AndroidChatViewModel.java
@@ -98,6 +98,10 @@ public class AndroidChatViewModel extends ViewModel implements MercuryAndroidVie
getCommonViewModel().sendMessage(body);
}
+ public String getContactId() {
+ return getContact().getValue().getId().toString();
+ }
+
@Override
public ChatViewModel getCommonViewModel() {
return commonViewModel;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
index eaaf601..6164a7b 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/chat/ChatActivity.java
@@ -2,10 +2,8 @@ package org.mercury_im.messenger.android.ui.chat;
import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
@@ -16,25 +14,27 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import org.jxmpp.jid.EntityBareJid;
-import org.jxmpp.jid.impl.JidCreate;
import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.R;
+import org.mercury_im.messenger.android.ui.MercuryActivity;
+import org.mercury_im.messenger.android.util.ArgumentUtils;
import org.mercury_im.messenger.entity.contact.Peer;
-import org.mercury_im.messenger.android.ui.roster.contacts.detail.ContactDetailActivity;
+import org.mercury_im.messenger.android.ui.contacts.detail.ContactDetailActivity;
import java.util.UUID;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.disposables.CompositeDisposable;
+import lombok.Value;
public class ChatActivity extends AppCompatActivity
- implements ChatInputFragment.OnChatInputActionListener, SearchView.OnQueryTextListener {
+ implements MercuryActivity, ChatInputFragment.OnChatInputActionListener, SearchView.OnQueryTextListener {
public static final String EXTRA_CHAT_ID = "CHAT_ID";
- public static final String EXTRA_JID = "JID";
- public static final String EXTRA_ACCOUNT = "ACCOUNT";
+
+ private final MessagesRecyclerViewAdapter recyclerViewAdapter = new MessagesRecyclerViewAdapter();
+ private final CompositeDisposable disposable = new CompositeDisposable();
@BindView(R.id.toolbar)
Toolbar toolbar;
@@ -42,53 +42,39 @@ public class ChatActivity extends AppCompatActivity
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
- private final MessagesRecyclerViewAdapter recyclerViewAdapter = new MessagesRecyclerViewAdapter();
-
private AndroidChatViewModel androidChatViewModel;
-
- private final CompositeDisposable disposable = new CompositeDisposable();
-
private UUID chatId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ MercuryImApplication.getApplication().getAppComponent().inject(this);
+ Arguments arguments = getArguments(savedInstanceState);
+ chatId = arguments.getChatId();
+
+ androidChatViewModel = new ViewModelProvider(this).get(AndroidChatViewModel.class);
+ androidChatViewModel.init(chatId);
+
+ bindUiComponents();
+ observeViewModel(androidChatViewModel);
+ }
+
+ private void bindUiComponents() {
setContentView(R.layout.activity_chat);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ toolbar.setOnClickListener(v -> {
+ Intent intent = new Intent(ChatActivity.this, ContactDetailActivity.class);
+ intent.putExtra(ContactDetailActivity.EXTRA_PEER_ID, androidChatViewModel.getContactId());
+ ChatActivity.this.startActivity(intent);
+ });
+
recyclerView.setAdapter(recyclerViewAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
- MercuryImApplication.getApplication().getAppComponent().inject(this);
-
- if (savedInstanceState == null) {
- savedInstanceState = getIntent().getExtras();
- if (savedInstanceState == null) return;
- }
-
- String chatIdString = savedInstanceState.getString(EXTRA_CHAT_ID);
- if (chatIdString == null) {
- return;
- }
-
- chatId = UUID.fromString(chatIdString);
- androidChatViewModel = new ViewModelProvider(this).get(AndroidChatViewModel.class);
- androidChatViewModel.init(chatId);
- // Listen for updates to contact information and messages
- observeViewModel(androidChatViewModel);
-
- toolbar.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(ChatActivity.this, ContactDetailActivity.class);
- intent.putExtra(ContactDetailActivity.EXTRA_PEER_ID, androidChatViewModel.getContact().getValue().getId().toString());
-
- ChatActivity.this.startActivity(intent);
- }
- });
}
public void observeViewModel(AndroidChatViewModel viewModel) {
@@ -204,4 +190,15 @@ public class ChatActivity extends AppCompatActivity
onBackPressed();
return true;
}
+
+ private Arguments getArguments(Bundle savedInstanceState) {
+ savedInstanceState = requiredExtras(savedInstanceState, getIntent());
+ UUID chatId = ArgumentUtils.requireUUID(savedInstanceState, EXTRA_CHAT_ID);
+ return new Arguments(chatId);
+ }
+
+ @Value
+ private class Arguments {
+ UUID chatId;
+ }
}
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AddContactDialogFragment.java
similarity index 99%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AddContactDialogFragment.java
index 1b7d59e..2d3891c 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AddContactDialogFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AddContactDialogFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.contacts;
import android.app.AlertDialog;
import android.app.Dialog;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AndroidContactListViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AndroidContactListViewModel.java
similarity index 97%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AndroidContactListViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AndroidContactListViewModel.java
index f70da74..8f7a380 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/AndroidContactListViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/AndroidContactListViewModel.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.contacts;
import android.app.Application;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListFragment.java
similarity index 96%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListFragment.java
index d185c1f..3ae9c56 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListFragment.java
@@ -1,6 +1,5 @@
-package org.mercury_im.messenger.android.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.contacts;
-import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListRecyclerViewAdapter.java
similarity index 95%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListRecyclerViewAdapter.java
index 5e39b1f..de25714 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListRecyclerViewAdapter.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/ContactListRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster.contacts;
+package org.mercury_im.messenger.android.ui.contacts;
import android.content.Context;
import android.content.Intent;
@@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.mercury_im.messenger.R;
import org.mercury_im.messenger.entity.contact.Peer;
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.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/android/ui/roster/RosterFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/RosterFragment.java
similarity index 92%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/RosterFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/RosterFragment.java
index 5cbbba9..0468f3e 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/RosterFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/RosterFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster;
+package org.mercury_im.messenger.android.ui.contacts;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -16,8 +16,8 @@ import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import org.mercury_im.messenger.R;
-import org.mercury_im.messenger.android.ui.roster.bookmarks.BookmarkListFragment;
-import org.mercury_im.messenger.android.ui.roster.contacts.ContactListFragment;
+import org.mercury_im.messenger.android.ui.bookmarks.BookmarkListFragment;
+import org.mercury_im.messenger.android.ui.contacts.ContactListFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailActivity.java
new file mode 100644
index 0000000..415eaa6
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailActivity.java
@@ -0,0 +1,60 @@
+package org.mercury_im.messenger.android.ui.contacts.detail;
+
+import android.os.Bundle;
+import android.widget.FrameLayout;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.ViewModelProvider;
+
+import org.mercury_im.messenger.android.MercuryImApplication;
+import org.mercury_im.messenger.R;
+import org.mercury_im.messenger.android.ui.MercuryActivity;
+import org.mercury_im.messenger.android.util.ArgumentUtils;
+
+import java.util.UUID;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import lombok.Value;
+
+public class ContactDetailActivity extends AppCompatActivity implements MercuryActivity {
+ public static final String EXTRA_PEER_ID = "PEER_ID";
+
+ private ContactDetailViewModel androidContactDetailViewModel;
+ private UUID peerId;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ MercuryImApplication.getApplication().getAppComponent().inject(this);
+
+ Arguments arguments = getArguments(savedInstanceState);
+ peerId = arguments.getPeerId();
+
+ androidContactDetailViewModel = new ViewModelProvider(this).get(ContactDetailViewModel.class);
+ androidContactDetailViewModel.init(peerId);
+
+ bindUiComponents();
+ }
+
+ private void bindUiComponents() {
+ setContentView(R.layout.activity_fragment_container);
+ ButterKnife.bind(this);
+
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.fragment, new ContactDetailFragment(), "contact_details")
+ .commit();
+ }
+
+ private Arguments getArguments(Bundle bundle) {
+ bundle = requiredExtras(bundle, getIntent());
+ UUID peerId = ArgumentUtils.requireUUID(bundle, EXTRA_PEER_ID);
+ return new Arguments(peerId);
+ }
+
+ @Value
+ private class Arguments {
+ UUID peerId;
+ }
+}
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java
similarity index 98%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java
index f86c1f2..8727c36 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailFragment.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java
@@ -1,4 +1,4 @@
-package org.mercury_im.messenger.android.ui.roster.contacts.detail;
+package org.mercury_im.messenger.android.ui.contacts.detail;
import android.app.AlertDialog;
import android.content.Context;
@@ -31,7 +31,6 @@ import org.mercury_im.messenger.R;
import org.mercury_im.messenger.android.ui.chat.ChatActivity;
import org.mercury_im.messenger.android.util.ColorUtil;
import org.mercury_im.messenger.core.viewmodel.openpgp.FingerprintViewItem;
-import org.mercury_im.messenger.entity.chat.DirectChat;
import java.util.Arrays;
import java.util.List;
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailViewModel.java
similarity index 97%
rename from app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java
rename to app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailViewModel.java
index 352c186..8dc1db9 100644
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailViewModel.java
+++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailViewModel.java
@@ -1,7 +1,6 @@
-package org.mercury_im.messenger.android.ui.roster.contacts.detail;
+package org.mercury_im.messenger.android.ui.contacts.detail;
import android.graphics.drawable.Drawable;
-import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
@@ -16,7 +15,6 @@ import org.jivesoftware.smack.roster.RosterEntry;
import org.jivesoftware.smack.roster.RosterGroup;
import org.jivesoftware.smackx.ox.store.definition.OpenPgpTrustStore;
import org.jxmpp.jid.BareJid;
-import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.Jid;
import org.jxmpp.jid.impl.JidCreate;
import org.mercury_im.messenger.android.MercuryImApplication;
@@ -28,7 +26,6 @@ import org.mercury_im.messenger.core.data.repository.PeerRepository;
import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.core.viewmodel.openpgp.FingerprintViewItem;
import org.mercury_im.messenger.entity.chat.Chat;
-import org.mercury_im.messenger.entity.contact.Peer;
import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable;
import org.mercury_im.messenger.core.util.CombinedPresenceListener;
import org.pgpainless.key.OpenPgpV4Fingerprint;
@@ -81,7 +78,7 @@ public class ContactDetailViewModel extends ViewModel {
MercuryImApplication.getApplication().getAppComponent().inject(this);
}
- public void bind(UUID peerId) {
+ public void init(UUID peerId) {
this.peerId = peerId;
disposable.add(peerRepository.getPeer(peerId)
diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java b/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java
deleted file mode 100644
index df48a34..0000000
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/detail/ContactDetailActivity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.mercury_im.messenger.android.ui.roster.contacts.detail;
-
-import android.os.Bundle;
-import android.widget.FrameLayout;
-
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.lifecycle.ViewModelProvider;
-
-import org.mercury_im.messenger.android.MercuryImApplication;
-import org.mercury_im.messenger.R;
-
-import java.util.UUID;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-
-public class ContactDetailActivity extends AppCompatActivity {
- public static final String EXTRA_JID = "JID";
- public static final String EXTRA_ACCOUNT = "ACCOUNT";
- public static final String EXTRA_PEER_ID = "PEER_ID";
-
- @BindView(R.id.fragment)
- FrameLayout container;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_fragment_container);
- ButterKnife.bind(this);
-
- MercuryImApplication.getApplication().getAppComponent().inject(this);
-
- if (savedInstanceState == null) {
- savedInstanceState = getIntent().getExtras();
- if (savedInstanceState == null) return;
- }
-
- String peerIdString = savedInstanceState.getString(EXTRA_PEER_ID);
- UUID peerId = UUID.fromString(peerIdString);
-
- ContactDetailViewModel viewModel = new ViewModelProvider(this).get(ContactDetailViewModel.class);
- viewModel.bind(peerId);
-
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment, new ContactDetailFragment(), "contact_details").commit();
- }
-}
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
deleted file mode 100644
index 3a8ce3d..0000000
--- a/app/src/main/java/org/mercury_im/messenger/android/ui/roster/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * 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/android/util/ArgumentUtils.java b/app/src/main/java/org/mercury_im/messenger/android/util/ArgumentUtils.java
new file mode 100644
index 0000000..64e26d5
--- /dev/null
+++ b/app/src/main/java/org/mercury_im/messenger/android/util/ArgumentUtils.java
@@ -0,0 +1,16 @@
+package org.mercury_im.messenger.android.util;
+
+import android.os.Bundle;
+
+import java.util.UUID;
+
+public class ArgumentUtils {
+
+ public static UUID requireUUID(Bundle bundle, String key) {
+ String uuidString = bundle.getString(key);
+ if (uuidString == null) {
+ throw new IllegalArgumentException("Missing required UUID '" + key + "' (as String)");
+ }
+ return UUID.fromString(uuidString);
+ }
+}
diff --git a/app/src/main/res/layout/fragment_bookmarks_list.xml b/app/src/main/res/layout/fragment_bookmarks_list.xml
index 02a12a9..fc0fd37 100644
--- a/app/src/main/res/layout/fragment_bookmarks_list.xml
+++ b/app/src/main/res/layout/fragment_bookmarks_list.xml
@@ -12,7 +12,7 @@
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
- tools:context=".android.ui.roster.contacts.ContactListFragment"
+ tools:context=".android.ui.contacts.ContactListFragment"
tools:listitem="@layout/list_item_chat" />
+ tools:context=".android.ui.contacts.ContactListFragment"/>