From 6c40b0030f8fdb9695f0c317642b1f8db0fbd930 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 22 Apr 2019 04:54:02 +0200 Subject: [PATCH] Add first draft of chat activity --- .idea/assetWizardSettings.xml | 46 ++++++++++++ app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 14 ++-- .../messenger/di/component/AppComponent.java | 2 +- .../messenger/di/module/RoomModule.java | 4 +- .../database/model/AccountModel.java | 14 +++- .../repository/account/Account.java | 18 +++++ .../{ => account}/AccountRepository.java | 2 +- .../AccountRepositoryImpl.java | 3 +- .../messenger/ui/chat/ChatActivity.java | 20 ++++++ .../messenger/ui/chat/ChatFragment.java | 36 ++++++++++ .../messenger/ui/chat/ChatViewModel.java | 7 ++ .../olomono/messenger/view/LoginActivity.java | 18 ++--- .../olomono/messenger/view/MainActivity.java | 7 +- .../view/viewmodel/LoginViewModel.java | 25 +++++++ .../main/res/drawable/ic_add_white_24dp.xml | 5 ++ .../main/res/drawable/ic_send_black_24dp.xml | 9 +++ app/src/main/res/layout/activity_chat.xml | 7 ++ app/src/main/res/layout/fragment_chat.xml | 35 ++++++++++ .../main/res/layout/recycler_view_item_1.xml | 52 ++++++++++++++ app/src/main/res/layout/view_chat_field.xml | 70 +++++++++++++++++++ app/src/main/res/values/colors.xml | 8 ++- app/src/main/res/values/styles.xml | 29 +++++++- 23 files changed, 397 insertions(+), 37 deletions(-) create mode 100644 .idea/assetWizardSettings.xml create mode 100644 app/src/main/java/org/olomono/messenger/persistence/repository/account/Account.java rename app/src/main/java/org/olomono/messenger/persistence/repository/{ => account}/AccountRepository.java (84%) rename app/src/main/java/org/olomono/messenger/persistence/repository/{impl => account}/AccountRepositoryImpl.java (86%) create mode 100644 app/src/main/java/org/olomono/messenger/ui/chat/ChatActivity.java create mode 100644 app/src/main/java/org/olomono/messenger/ui/chat/ChatFragment.java create mode 100644 app/src/main/java/org/olomono/messenger/ui/chat/ChatViewModel.java create mode 100644 app/src/main/java/org/olomono/messenger/view/viewmodel/LoginViewModel.java create mode 100644 app/src/main/res/drawable/ic_add_white_24dp.xml create mode 100644 app/src/main/res/drawable/ic_send_black_24dp.xml create mode 100644 app/src/main/res/layout/activity_chat.xml create mode 100644 app/src/main/res/layout/fragment_chat.xml create mode 100644 app/src/main/res/layout/recycler_view_item_1.xml create mode 100644 app/src/main/res/layout/view_chat_field.xml diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..e599c15 --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,46 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index e024cf3..1814542 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -69,6 +69,8 @@ dependencies { // architecture components for database and lifecycle management implementation "android.arch.lifecycle:extensions:$archCompVersion" implementation "android.arch.persistence.room:runtime:$archCompVersion" + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'android.arch.lifecycle:extensions:1.1.1' annotationProcessor "android.arch.lifecycle:compiler:$archCompVersion" annotationProcessor "android.arch.persistence.room:compiler:$archCompVersion" @@ -81,6 +83,7 @@ dependencies { implementation "com.android.support:design:$supportLibVersion" implementation "com.android.support:support-v4:$supportLibVersion" implementation "com.android.support:support-vector-drawable:$supportLibVersion" + implementation "com.android.support:cardview-v7:$supportLibVersion" implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b6934a..ce6ae21 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,23 +13,25 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + + + + - diff --git a/app/src/main/java/org/olomono/messenger/di/component/AppComponent.java b/app/src/main/java/org/olomono/messenger/di/component/AppComponent.java index 0d5dc61..eadffbc 100644 --- a/app/src/main/java/org/olomono/messenger/di/component/AppComponent.java +++ b/app/src/main/java/org/olomono/messenger/di/component/AppComponent.java @@ -7,7 +7,7 @@ import org.olomono.messenger.di.module.RoomModule; import org.olomono.messenger.persistence.database.AppDatabase; import org.olomono.messenger.persistence.database.dao.AccountDao; import org.olomono.messenger.persistence.database.dao.RosterEntryDao; -import org.olomono.messenger.persistence.repository.AccountRepository; +import org.olomono.messenger.persistence.repository.account.AccountRepository; import org.olomono.messenger.persistence.repository.RosterEntryRepository; import org.olomono.messenger.view.MainActivity; diff --git a/app/src/main/java/org/olomono/messenger/di/module/RoomModule.java b/app/src/main/java/org/olomono/messenger/di/module/RoomModule.java index 67cfd42..7d4fe9d 100644 --- a/app/src/main/java/org/olomono/messenger/di/module/RoomModule.java +++ b/app/src/main/java/org/olomono/messenger/di/module/RoomModule.java @@ -5,9 +5,9 @@ import android.app.Application; import org.olomono.messenger.persistence.database.AppDatabase; import org.olomono.messenger.persistence.database.dao.AccountDao; import org.olomono.messenger.persistence.database.dao.RosterEntryDao; -import org.olomono.messenger.persistence.repository.AccountRepository; +import org.olomono.messenger.persistence.repository.account.AccountRepository; import org.olomono.messenger.persistence.repository.RosterEntryRepository; -import org.olomono.messenger.persistence.repository.impl.AccountRepositoryImpl; +import org.olomono.messenger.persistence.repository.account.AccountRepositoryImpl; import org.olomono.messenger.persistence.repository.impl.RosterEntryRepositoryImpl; import javax.inject.Singleton; diff --git a/app/src/main/java/org/olomono/messenger/persistence/database/model/AccountModel.java b/app/src/main/java/org/olomono/messenger/persistence/database/model/AccountModel.java index 35650f5..ea94729 100644 --- a/app/src/main/java/org/olomono/messenger/persistence/database/model/AccountModel.java +++ b/app/src/main/java/org/olomono/messenger/persistence/database/model/AccountModel.java @@ -1,45 +1,57 @@ package org.olomono.messenger.persistence.database.model; +import android.arch.persistence.room.ColumnInfo; import android.arch.persistence.room.Entity; import android.arch.persistence.room.PrimaryKey; import android.arch.persistence.room.TypeConverters; import org.jxmpp.jid.EntityBareJid; import org.olomono.messenger.persistence.database.type_converter.EntityBareJidConverter; +import org.olomono.messenger.persistence.repository.account.Account; @Entity -public class AccountModel { +public class AccountModel implements Account { @PrimaryKey + @ColumnInfo(name = "id") public int id; @TypeConverters(EntityBareJidConverter.class) + @ColumnInfo(name = "jid") private EntityBareJid jid; + @ColumnInfo(name = "password") private String password; + @ColumnInfo(name = "enabled") private boolean enabled; + @Override public EntityBareJid getJid() { return jid; } + @Override public void setJid(EntityBareJid jid) { this.jid = jid; } + @Override public String getPassword() { return password; } + @Override public void setPassword(String password) { this.password = password; } + @Override public boolean getEnabled() { return enabled; } + @Override public void setEnabled(boolean enabled) { this.enabled = enabled; } diff --git a/app/src/main/java/org/olomono/messenger/persistence/repository/account/Account.java b/app/src/main/java/org/olomono/messenger/persistence/repository/account/Account.java new file mode 100644 index 0000000..f76e4a1 --- /dev/null +++ b/app/src/main/java/org/olomono/messenger/persistence/repository/account/Account.java @@ -0,0 +1,18 @@ +package org.olomono.messenger.persistence.repository.account; + +import org.jxmpp.jid.EntityBareJid; + +public interface Account { + + String getPassword(); + + void setPassword(String password); + + EntityBareJid getJid(); + + void setJid(EntityBareJid jid); + + boolean getEnabled(); + + void setEnabled(boolean enabled); +} diff --git a/app/src/main/java/org/olomono/messenger/persistence/repository/AccountRepository.java b/app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepository.java similarity index 84% rename from app/src/main/java/org/olomono/messenger/persistence/repository/AccountRepository.java rename to app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepository.java index 72f9e6d..5bf0420 100644 --- a/app/src/main/java/org/olomono/messenger/persistence/repository/AccountRepository.java +++ b/app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepository.java @@ -1,4 +1,4 @@ -package org.olomono.messenger.persistence.repository; +package org.olomono.messenger.persistence.repository.account; import android.arch.lifecycle.LiveData; diff --git a/app/src/main/java/org/olomono/messenger/persistence/repository/impl/AccountRepositoryImpl.java b/app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepositoryImpl.java similarity index 86% rename from app/src/main/java/org/olomono/messenger/persistence/repository/impl/AccountRepositoryImpl.java rename to app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepositoryImpl.java index 1a8b78e..0c7d5fd 100644 --- a/app/src/main/java/org/olomono/messenger/persistence/repository/impl/AccountRepositoryImpl.java +++ b/app/src/main/java/org/olomono/messenger/persistence/repository/account/AccountRepositoryImpl.java @@ -1,10 +1,9 @@ -package org.olomono.messenger.persistence.repository.impl; +package org.olomono.messenger.persistence.repository.account; import android.arch.lifecycle.LiveData; import org.olomono.messenger.persistence.database.dao.AccountDao; import org.olomono.messenger.persistence.database.model.AccountModel; -import org.olomono.messenger.persistence.repository.AccountRepository; import java.util.List; diff --git a/app/src/main/java/org/olomono/messenger/ui/chat/ChatActivity.java b/app/src/main/java/org/olomono/messenger/ui/chat/ChatActivity.java new file mode 100644 index 0000000..2649a5c --- /dev/null +++ b/app/src/main/java/org/olomono/messenger/ui/chat/ChatActivity.java @@ -0,0 +1,20 @@ +package org.olomono.messenger.ui.chat; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import org.olomono.messenger.R; + +public class ChatActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_chat); + if (savedInstanceState == null) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.container, ChatFragment.newInstance()) + .commitNow(); + } + } +} diff --git a/app/src/main/java/org/olomono/messenger/ui/chat/ChatFragment.java b/app/src/main/java/org/olomono/messenger/ui/chat/ChatFragment.java new file mode 100644 index 0000000..d67c065 --- /dev/null +++ b/app/src/main/java/org/olomono/messenger/ui/chat/ChatFragment.java @@ -0,0 +1,36 @@ +package org.olomono.messenger.ui.chat; + +import android.arch.lifecycle.ViewModelProviders; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.olomono.messenger.R; + +public class ChatFragment extends Fragment { + + private ChatViewModel mViewModel; + + public static ChatFragment newInstance() { + return new ChatFragment(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_chat, container, false); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + mViewModel = ViewModelProviders.of(this).get(ChatViewModel.class); + // TODO: Use the ViewModel + } + +} diff --git a/app/src/main/java/org/olomono/messenger/ui/chat/ChatViewModel.java b/app/src/main/java/org/olomono/messenger/ui/chat/ChatViewModel.java new file mode 100644 index 0000000..8f5a3aa --- /dev/null +++ b/app/src/main/java/org/olomono/messenger/ui/chat/ChatViewModel.java @@ -0,0 +1,7 @@ +package org.olomono.messenger.ui.chat; + +import android.arch.lifecycle.ViewModel; + +public class ChatViewModel extends ViewModel { + // TODO: Implement the ViewModel +} diff --git a/app/src/main/java/org/olomono/messenger/view/LoginActivity.java b/app/src/main/java/org/olomono/messenger/view/LoginActivity.java index b8549a4..ce61ac7 100644 --- a/app/src/main/java/org/olomono/messenger/view/LoginActivity.java +++ b/app/src/main/java/org/olomono/messenger/view/LoginActivity.java @@ -1,8 +1,8 @@ package org.olomono.messenger.view; -import android.support.v7.app.AppCompatActivity; - +import android.arch.lifecycle.ViewModelProviders; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; @@ -15,6 +15,7 @@ import android.widget.TextView; import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.impl.JidCreate; import org.olomono.messenger.R; +import org.olomono.messenger.view.viewmodel.LoginViewModel; /** * A login screen that offers login via email/password. @@ -36,17 +37,10 @@ public class LoginActivity extends AppCompatActivity implements TextView.OnEdito mJidView = findViewById(R.id.jid); mPasswordView = findViewById(R.id.password); + LoginViewModel viewModel = ViewModelProviders.of(this).get(LoginViewModel.class); + mJidView.setOnEditorActionListener(this); - mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) { - if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { - loginDetailsEntered(); - return true; - } - return false; - } - }); + mPasswordView.setOnEditorActionListener(this); Button mEmailSignInButton = findViewById(R.id.sign_in_button); mEmailSignInButton.setOnClickListener(new OnClickListener() { diff --git a/app/src/main/java/org/olomono/messenger/view/MainActivity.java b/app/src/main/java/org/olomono/messenger/view/MainActivity.java index 337657a..becb2f7 100644 --- a/app/src/main/java/org/olomono/messenger/view/MainActivity.java +++ b/app/src/main/java/org/olomono/messenger/view/MainActivity.java @@ -9,19 +9,16 @@ import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.Toast; import org.jxmpp.jid.impl.JidCreate; -import org.jxmpp.stringprep.XmppStringprepException; import org.olomono.messenger.R; -import org.olomono.messenger.di.component.AppComponent; import org.olomono.messenger.di.component.DaggerAppComponent; import org.olomono.messenger.di.module.AppModule; import org.olomono.messenger.di.module.RoomModule; import org.olomono.messenger.persistence.database.AppDatabase; import org.olomono.messenger.persistence.database.model.AccountModel; import org.olomono.messenger.persistence.database.model.RosterEntryModel; -import org.olomono.messenger.persistence.repository.AccountRepository; +import org.olomono.messenger.persistence.repository.account.AccountRepository; import org.olomono.messenger.persistence.repository.RosterEntryRepository; import org.olomono.messenger.view.settings.SettingsActivity; @@ -29,8 +26,6 @@ import java.util.List; import javax.inject.Inject; -import dagger.internal.DaggerCollections; - public class MainActivity extends AppCompatActivity { @Inject diff --git a/app/src/main/java/org/olomono/messenger/view/viewmodel/LoginViewModel.java b/app/src/main/java/org/olomono/messenger/view/viewmodel/LoginViewModel.java new file mode 100644 index 0000000..ccdca05 --- /dev/null +++ b/app/src/main/java/org/olomono/messenger/view/viewmodel/LoginViewModel.java @@ -0,0 +1,25 @@ +package org.olomono.messenger.view.viewmodel; + +import android.arch.lifecycle.MutableLiveData; +import android.arch.lifecycle.ViewModel; + + +public class LoginViewModel extends ViewModel { + + public LoginViewModel() { + super(); + } + + public MutableLiveData credentials; + + void setJid(String jid) { + } + + void setPassword(String password) { + + } + + static class DisplayableCredentials { + + } +} diff --git a/app/src/main/res/drawable/ic_add_white_24dp.xml b/app/src/main/res/drawable/ic_add_white_24dp.xml new file mode 100644 index 0000000..e3979cd --- /dev/null +++ b/app/src/main/res/drawable/ic_add_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_send_black_24dp.xml b/app/src/main/res/drawable/ic_send_black_24dp.xml new file mode 100644 index 0000000..e145ca8 --- /dev/null +++ b/app/src/main/res/drawable/ic_send_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml new file mode 100644 index 0000000..0888d62 --- /dev/null +++ b/app/src/main/res/layout/activity_chat.xml @@ -0,0 +1,7 @@ + + diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml new file mode 100644 index 0000000..8ef88e0 --- /dev/null +++ b/app/src/main/res/layout/fragment_chat.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/recycler_view_item_1.xml b/app/src/main/res/layout/recycler_view_item_1.xml new file mode 100644 index 0000000..00914c3 --- /dev/null +++ b/app/src/main/res/layout/recycler_view_item_1.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_chat_field.xml b/app/src/main/res/layout/view_chat_field.xml new file mode 100644 index 0000000..8259317 --- /dev/null +++ b/app/src/main/res/layout/view_chat_field.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 69b2233..611620c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,6 +1,8 @@ - #008577 - #00574B - #D81B60 + #38445e + #0f1d34 + #636f8b + + #ECEFF1 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 545b9c6..5d0b9da 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,20 +1,43 @@ - + - - + + + +