diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8dff2f6..7fdee24 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,15 +16,13 @@ android:label="@string/app_name" android:roundIcon="@drawable/ic_mercury_icon" android:supportsRtl="true" - android:theme="@style/AppTheme.Light"> + android:theme="@style/AppTheme"> + android:label="Chat"/> + android:label="@string/app_name"> diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java index a1ae48e..7d59751 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListRecyclerViewAdapter.java @@ -9,7 +9,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import org.mercury_im.messenger.R; -import org.mercury_im.messenger.persistence.model.ChatModel; +import org.mercury_im.messenger.persistence.pojo.Chat; import org.mercury_im.messenger.ui.util.AbstractRecyclerViewAdapter; import butterknife.BindView; @@ -17,7 +17,7 @@ import butterknife.ButterKnife; import de.hdodenhof.circleimageview.CircleImageView; public class ChatListRecyclerViewAdapter - extends AbstractRecyclerViewAdapter { + extends AbstractRecyclerViewAdapter { public ChatListRecyclerViewAdapter() { super(new ChatMessageDiffCallback(true)); @@ -33,7 +33,8 @@ public class ChatListRecyclerViewAdapter @Override public void onBindViewHolder(@NonNull ChatHolder holder, int position) { - ChatModel model = getModelAt(position); + Chat model = getModelAt(position); + holder.nameView.setText(model.jid.toString()); // TODO: Better bindable model pls } @@ -57,19 +58,19 @@ public class ChatListRecyclerViewAdapter } } - private static class ChatMessageDiffCallback extends AbstractDiffCallback { + private static class ChatMessageDiffCallback extends AbstractDiffCallback { public ChatMessageDiffCallback(boolean detectMoves) { super(detectMoves); } @Override - public boolean areItemsTheSame(ChatModel oldItem, ChatModel newItem) { - return oldItem.getId() == newItem.getId(); + public boolean areItemsTheSame(Chat oldItem, Chat newItem) { + return oldItem.chatId == newItem.chatId; } @Override - public boolean areContentsTheSame(ChatModel oldItem, ChatModel newItem) { + public boolean areContentsTheSame(Chat oldItem, Chat newItem) { return areItemsTheSame(oldItem, newItem); } } diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java index c9d54f1..2ded6ce 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chatlist/ChatListViewModel.java @@ -9,6 +9,7 @@ import org.mercury_im.messenger.persistence.model.ChatModel; import org.mercury_im.messenger.persistence.model.MessageModel; import org.mercury_im.messenger.persistence.repository.ChatRepository; import org.mercury_im.messenger.persistence.repository.MessageRepository; +import org.mercury_im.messenger.persistence.pojo.Chat; import java.util.List; @@ -29,20 +30,15 @@ public class ChatListViewModel extends ViewModel { private CompositeDisposable disposable = new CompositeDisposable(); - private final MutableLiveData> chats = new MutableLiveData<>(); + private final MutableLiveData> chats = new MutableLiveData<>(); public ChatListViewModel() { MercuryImApplication.getApplication().getAppComponent().inject(this); - disposable.add(chatRepository.getAllChats() + disposable.add(chatRepository.getDisplayableChats() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe((Consumer>) chatModels -> { - chats.setValue(chatModels); - //for (ChatModel chat : chatModels) { - // messageRepository.getLastMessageFrom(chat.ge) - //} - })); + .subscribe((Consumer>) chats::setValue)); disposable.add(messageRepository.getAllMessages() .subscribeOn(Schedulers.io()) @@ -54,7 +50,7 @@ public class ChatListViewModel extends ViewModel { })); } - public LiveData> getChats() { + public LiveData> getChats() { return chats; } diff --git a/app/src/main/res/drawable/ic_group_black_24dp.xml b/app/src/main/res/drawable/ic_group_black_24dp.xml new file mode 100644 index 0000000..4cfd869 --- /dev/null +++ b/app/src/main/res/drawable/ic_group_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cfe371f..6f156e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -25,7 +25,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" - android:background="@color/colorAccent" + app:itemIconTint="?attr/colorAccent" + app:itemTextColor="?attr/colorAccent" + app:itemBackground="?attr/colorPrimary" app:menu="@menu/bottom_menu_main" /> \ No newline at end of file diff --git a/app/src/main/res/layout/recycler_view_item_chat_list.xml b/app/src/main/res/layout/recycler_view_item_chat_list.xml index 894bd3b..9b4ef18 100644 --- a/app/src/main/res/layout/recycler_view_item_chat_list.xml +++ b/app/src/main/res/layout/recycler_view_item_chat_list.xml @@ -22,7 +22,6 @@ android:layout_height="wrap_content" tools:text="@tools:sample/full_names" android:textSize="20sp" - android:textColor="@android:color/black" app:layout_constraintTop_toTopOf="@+id/chat_avatar" app:layout_constraintStart_toEndOf="@+id/chat_avatar" android:layout_marginStart="8dp" diff --git a/app/src/main/res/layout/recycler_view_item_roster_entry.xml b/app/src/main/res/layout/recycler_view_item_roster_entry.xml index a47713b..5620a06 100644 --- a/app/src/main/res/layout/recycler_view_item_roster_entry.xml +++ b/app/src/main/res/layout/recycler_view_item_roster_entry.xml @@ -26,7 +26,6 @@ android:layout_height="wrap_content" tools:text="@tools:sample/full_names" android:textSize="20sp" - android:textColor="@android:color/black" app:layout_constraintTop_toTopOf="@+id/roster_entry__avatar" app:layout_constraintStart_toEndOf="@+id/roster_entry__avatar" android:layout_marginStart="8dp" diff --git a/app/src/main/res/layout/view_chat_field.xml b/app/src/main/res/layout/view_chat_field.xml deleted file mode 100644 index a531d16..0000000 --- a/app/src/main/res/layout/view_chat_field.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_compose.xml b/app/src/main/res/layout/view_compose.xml index cda320a..75465c3 100644 --- a/app/src/main/res/layout/view_compose.xml +++ b/app/src/main/res/layout/view_compose.xml @@ -43,6 +43,8 @@ android:background="@null" android:hint="@string/hint_type_your_message" android:inputType="textMultiLine|textAutoCorrect|textCapSentences" + android:textColor="@android:color/primary_text_light" + android:textColorHint="@android:color/secondary_text_light" android:maxLines="6" android:padding="8dp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/view_message_text_in.xml b/app/src/main/res/layout/view_message_text_in.xml index fe5c5bf..83c2c4f 100644 --- a/app/src/main/res/layout/view_message_text_in.xml +++ b/app/src/main/res/layout/view_message_text_in.xml @@ -23,6 +23,7 @@ android:id="@+id/msg_body" android:layout_width="0dp" android:layout_height="wrap_content" + android:textColor="@android:color/primary_text_light" android:lineSpacingExtra="2dp" android:paddingStart="@dimen/msg_padding_start" diff --git a/app/src/main/res/layout/view_message_text_out.xml b/app/src/main/res/layout/view_message_text_out.xml index 298d53b..bd14c60 100644 --- a/app/src/main/res/layout/view_message_text_out.xml +++ b/app/src/main/res/layout/view_message_text_out.xml @@ -18,6 +18,7 @@ android:paddingTop="@dimen/msg_padding_top" android:paddingEnd="@dimen/msg_padding_end" android:paddingBottom="@dimen/msg_padding_bottom" + android:textColor="@android:color/primary_text_light" android:elevation="@dimen/msg_elevation" android:layout_marginTop="@dimen/msg_spacing_vertical" diff --git a/app/src/main/res/menu/bottom_menu_main.xml b/app/src/main/res/menu/bottom_menu_main.xml index 789ed3e..c62dc7a 100644 --- a/app/src/main/res/menu/bottom_menu_main.xml +++ b/app/src/main/res/menu/bottom_menu_main.xml @@ -7,7 +7,7 @@ + android:icon="@drawable/ic_group_black_24dp" /> #FFF - #38445e - #0f1d34 - #636f8b + #005959 + #356a6a + #001a19 + #85bb00 + #b9ee49 + #528b00 + #ffffff + #000000 - #EDF0F2 + #FFF #FFF diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f4ccf11..cca0a55 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,34 +1,18 @@ - - - - - - - - - - - + + diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/ChatDao.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/ChatDao.java index e8bdbaf..5d9b6d5 100644 --- a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/ChatDao.java +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/ChatDao.java @@ -6,14 +6,13 @@ import androidx.room.TypeConverters; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.room.model.RoomChatModel; -import org.mercury_im.messenger.persistence.room.pojo.Chat; +import org.mercury_im.messenger.persistence.pojo.Chat; import org.mercury_im.messenger.persistence.room.type_converter.EntityBareJidConverter; import java.util.List; import io.reactivex.Maybe; import io.reactivex.Observable; -import io.reactivex.Single; @Dao @TypeConverters(EntityBareJidConverter.class) @@ -42,4 +41,10 @@ public interface ChatDao extends BaseDao { @Query("SELECT chats.* FROM chats JOIN contacts WHERE contacts.pk_contact_id = :contactId") Observable getChatWithContact(long contactId); + + @Query("SELECT chats.pk_chat_id as chatId, " + + "chats.fk_entity_id as entityId, " + + "jid, active " + + "from chats LEFT JOIN entities ON chats.fk_entity_id = entities.pk_entity_id") + Observable> getChatPojos(); } diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IChatRepository.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IChatRepository.java index 1ff57c5..e550df2 100644 --- a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IChatRepository.java +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IChatRepository.java @@ -4,6 +4,7 @@ import android.util.Log; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.model.EntityModel; +import org.mercury_im.messenger.persistence.pojo.Chat; import org.mercury_im.messenger.persistence.repository.ChatRepository; import org.mercury_im.messenger.persistence.repository.RosterRepository; import org.mercury_im.messenger.persistence.room.dao.ChatDao; @@ -111,4 +112,9 @@ public class IChatRepository implements ChatRepository { return chatDao.delete(chat); } + @Override + public Observable> getDisplayableChats() { + return chatDao.getChatPojos(); + } + } diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/pojo/Chat.java b/persistence/src/main/java/org/mercury_im/messenger/persistence/pojo/Chat.java similarity index 74% rename from persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/pojo/Chat.java rename to persistence/src/main/java/org/mercury_im/messenger/persistence/pojo/Chat.java index a0f184b..0bfb3ab 100644 --- a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/pojo/Chat.java +++ b/persistence/src/main/java/org/mercury_im/messenger/persistence/pojo/Chat.java @@ -1,4 +1,4 @@ -package org.mercury_im.messenger.persistence.room.pojo; +package org.mercury_im.messenger.persistence.pojo; import org.jxmpp.jid.EntityBareJid; diff --git a/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/ChatRepository.java b/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/ChatRepository.java index 4362a45..4f0e938 100644 --- a/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/ChatRepository.java +++ b/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/ChatRepository.java @@ -5,6 +5,7 @@ import org.mercury_im.messenger.persistence.model.AccountModel; import org.mercury_im.messenger.persistence.model.ChatModel; import org.mercury_im.messenger.persistence.model.ContactModel; import org.mercury_im.messenger.persistence.model.EntityModel; +import org.mercury_im.messenger.persistence.pojo.Chat; import java.util.List; @@ -69,10 +70,6 @@ public interface ChatRepository { Completable closeChat(E chat); - - - - - + Observable> getDisplayableChats(); }