From ac2037e06c4e8596423c971b08a7df53d008e47f Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 18 May 2019 10:06:16 +0200 Subject: [PATCH] AndroidX --- app/build.gradle | 33 +++--- .../messenger/ExampleInstrumentedTest.java | 4 +- app/src/main/AndroidManifest.xml | 1 + .../persistence/database/AppDatabase.java | 7 +- .../persistence/database/dao/AccountDao.java | 18 +-- .../database/dao/RosterEntryDao.java | 14 +-- .../database/model/AccountModel.java | 9 +- .../database/model/RosterEntryModel.java | 11 +- .../type_converter/BareJidConverter.java | 2 +- .../EntityBareJidConverter.java | 2 +- .../repository/account/AccountRepository.java | 4 +- .../account/AccountRepositoryImpl.java | 20 +++- .../roster/RosterEntryRepository.java | 2 +- .../roster/RosterEntryRepositoryImpl.java | 2 +- .../messenger/service/XmppService.java | 112 +++++++++++++++--- .../mercury_im/messenger/ui/MainActivity.java | 35 +++--- .../messenger/ui/chat/ChatActivity.java | 2 +- .../messenger/ui/chat/ChatInputFragment.java | 12 +- .../messenger/ui/chat/ChatInputViewModel.java | 4 +- .../messenger/ui/chat/ChatViewModel.java | 2 +- .../messenger/ui/login/LoginActivity.java | 39 +++++- .../messenger/ui/login/LoginViewModel.java | 6 +- .../messenger/ui/roster/RosterFragment.java | 10 +- .../ui/roster/RosterRecyclerViewAdapter.java | 4 +- .../messenger/ui/roster/RosterViewModel.java | 6 +- .../settings/AppCompatPreferenceActivity.java | 10 +- .../ui/settings/SettingsActivity.java | 2 +- app/src/main/res/layout/activity_login.xml | 8 +- app/src/main/res/layout/activity_main.xml | 12 +- app/src/main/res/layout/fragment_chat.xml | 8 +- .../res/layout/fragment_roster_entry_list.xml | 10 +- .../main/res/layout/recycler_view_item.xml | 4 +- .../main/res/layout/recycler_view_item_1.xml | 4 +- .../recycler_view_item_roster_entry.xml | 4 +- app/src/main/res/layout/view_chat_field.xml | 16 +-- .../main/res/layout/view_message_text_in.xml | 8 +- .../main/res/layout/view_message_text_out.xml | 8 +- gradle.properties | 2 + version.gradle | 3 +- 39 files changed, 291 insertions(+), 169 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6fd7fa1..c3f343c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ android { targetSdkVersion 28 versionCode 1 versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true multiDexEnabled true } @@ -71,30 +71,33 @@ check.configure { // Dependency versions are located in version.gradle dependencies { + /* + architecture components for database and lifecycle management + */ - // architecture components for database and lifecycle management - implementation "android.arch.lifecycle:extensions:$archCompVersion" - implementation "android.arch.persistence.room:runtime:$archCompVersion" - implementation "android.arch.lifecycle:extensions:$archCompVersion" + // ViewModel and LiveData + implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion" + annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycleVersion" - annotationProcessor "android.arch.lifecycle:compiler:$archCompVersion" - annotationProcessor "android.arch.persistence.room:compiler:$archCompVersion" + // Room + implementation "androidx.room:room-runtime:$roomVersion" + annotationProcessor "androidx.room:room-compiler:$roomVersion" // Dagger 2 for dependency injection implementation "com.google.dagger:dagger:$daggerVersion" annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" // support libraries - implementation "com.android.support:appcompat-v7:$supportLibVersion" - 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' + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.vectordrawable:vectordrawable:1.0.1' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' // circular image viewer for avatars implementation 'de.hdodenhof:circleimageview:2.2.0' diff --git a/app/src/androidTest/java/org/mercury_im/messenger/ExampleInstrumentedTest.java b/app/src/androidTest/java/org/mercury_im/messenger/ExampleInstrumentedTest.java index aed940b..5cb333c 100644 --- a/app/src/androidTest/java/org/mercury_im/messenger/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/org/mercury_im/messenger/ExampleInstrumentedTest.java @@ -1,8 +1,8 @@ package org.mercury_im.messenger; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0aaa445..b9356d0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + getAccountByJid(EntityBareJid jid); @Insert - void insertAccount(AccountModel account); + long insertAccount(AccountModel account); @Update void updateAccount(AccountModel account); diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/database/dao/RosterEntryDao.java b/app/src/main/java/org/mercury_im/messenger/persistence/database/dao/RosterEntryDao.java index 2381e84..a056d00 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/database/dao/RosterEntryDao.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/database/dao/RosterEntryDao.java @@ -1,18 +1,18 @@ package org.mercury_im.messenger.persistence.database.dao; -import android.arch.lifecycle.LiveData; -import android.arch.persistence.room.Dao; -import android.arch.persistence.room.Delete; -import android.arch.persistence.room.Insert; -import android.arch.persistence.room.Query; -import android.arch.persistence.room.TypeConverters; +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.TypeConverters; import org.mercury_im.messenger.persistence.database.type_converter.EntityBareJidConverter; import org.mercury_im.messenger.persistence.database.model.RosterEntryModel; import java.util.List; -import static android.arch.persistence.room.OnConflictStrategy.REPLACE; +import static androidx.room.OnConflictStrategy.REPLACE; @Dao @TypeConverters(EntityBareJidConverter.class) diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/database/model/AccountModel.java b/app/src/main/java/org/mercury_im/messenger/persistence/database/model/AccountModel.java index 230d3a1..6d97a05 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/database/model/AccountModel.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/database/model/AccountModel.java @@ -1,9 +1,10 @@ package org.mercury_im.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 androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; +import androidx.room.TypeConverters; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.database.type_converter.EntityBareJidConverter; diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/database/model/RosterEntryModel.java b/app/src/main/java/org/mercury_im/messenger/persistence/database/model/RosterEntryModel.java index bc4046e..97a3395 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/database/model/RosterEntryModel.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/database/model/RosterEntryModel.java @@ -1,14 +1,15 @@ package org.mercury_im.messenger.persistence.database.model; -import android.arch.persistence.room.Entity; -import android.arch.persistence.room.ForeignKey; -import android.arch.persistence.room.PrimaryKey; -import android.arch.persistence.room.TypeConverters; + +import androidx.room.Entity; +import androidx.room.ForeignKey; +import androidx.room.PrimaryKey; +import androidx.room.TypeConverters; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.database.type_converter.EntityBareJidConverter; -import static android.arch.persistence.room.ForeignKey.CASCADE; +import static androidx.room.ForeignKey.CASCADE; @Entity(foreignKeys = @ForeignKey(entity = AccountModel.class, parentColumns = "id", diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/BareJidConverter.java b/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/BareJidConverter.java index 3c01998..a07b168 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/BareJidConverter.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/BareJidConverter.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.persistence.database.type_converter; -import android.arch.persistence.room.TypeConverter; +import androidx.room.TypeConverter; import org.jxmpp.jid.BareJid; import org.jxmpp.jid.impl.JidCreate; diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/EntityBareJidConverter.java b/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/EntityBareJidConverter.java index fcb6d75..61b64d1 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/EntityBareJidConverter.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/database/type_converter/EntityBareJidConverter.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.persistence.database.type_converter; -import android.arch.persistence.room.TypeConverter; +import androidx.room.TypeConverter; import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.impl.JidCreate; diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepository.java b/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepository.java index 9e2c145..e3eadfc 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepository.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepository.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.persistence.repository.account; -import android.arch.lifecycle.LiveData; +import androidx.lifecycle.LiveData; import org.mercury_im.messenger.persistence.database.model.AccountModel; @@ -12,5 +12,5 @@ public interface AccountRepository { LiveData> getAllAccounts(); - void insertAccount(AccountModel accountModel); + long insertAccount(AccountModel accountModel); } diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepositoryImpl.java b/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepositoryImpl.java index 481b2ae..6f26af8 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepositoryImpl.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/repository/account/AccountRepositoryImpl.java @@ -1,12 +1,13 @@ package org.mercury_im.messenger.persistence.repository.account; -import android.arch.lifecycle.LiveData; +import androidx.lifecycle.LiveData; import android.os.AsyncTask; import org.mercury_im.messenger.persistence.database.dao.AccountDao; import org.mercury_im.messenger.persistence.database.model.AccountModel; import java.util.List; +import java.util.concurrent.ExecutionException; import javax.inject.Inject; @@ -30,12 +31,19 @@ public class AccountRepositoryImpl implements AccountRepository { } @Override - public void insertAccount(AccountModel accountModel) { + public long insertAccount(AccountModel accountModel) { InsertAsyncTask task = new InsertAsyncTask(accountDao); - task.execute(accountModel); + try { + return task.execute(accountModel).get(); + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return -1; } - private static class InsertAsyncTask extends AsyncTask { + private static class InsertAsyncTask extends AsyncTask { private final AccountDao accountDao; @@ -44,9 +52,9 @@ public class AccountRepositoryImpl implements AccountRepository { } @Override - protected Void doInBackground(AccountModel... accountModels) { + protected Long doInBackground(AccountModel... accountModels) { for (AccountModel accountModel : accountModels) { - accountDao.insertAccount(accountModel); + return accountDao.insertAccount(accountModel); } return null; } diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepository.java b/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepository.java index c950e0f..6cc0a65 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepository.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepository.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.persistence.repository.roster; -import android.arch.lifecycle.LiveData; +import androidx.lifecycle.LiveData; import org.jivesoftware.smack.roster.RosterEntry; import org.mercury_im.messenger.persistence.database.model.RosterEntryModel; diff --git a/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepositoryImpl.java b/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepositoryImpl.java index c329b8f..7f702c1 100644 --- a/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepositoryImpl.java +++ b/app/src/main/java/org/mercury_im/messenger/persistence/repository/roster/RosterEntryRepositoryImpl.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.persistence.repository.roster; -import android.arch.lifecycle.LiveData; +import androidx.lifecycle.LiveData; import org.mercury_im.messenger.persistence.database.dao.RosterEntryDao; import org.mercury_im.messenger.persistence.database.model.RosterEntryModel; diff --git a/app/src/main/java/org/mercury_im/messenger/service/XmppService.java b/app/src/main/java/org/mercury_im/messenger/service/XmppService.java index 0391f8f..0c1e75c 100644 --- a/app/src/main/java/org/mercury_im/messenger/service/XmppService.java +++ b/app/src/main/java/org/mercury_im/messenger/service/XmppService.java @@ -5,18 +5,28 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; -import android.support.annotation.Nullable; -import android.support.v4.app.NotificationCompat; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; import android.util.Log; import android.util.LongSparseArray; +import android.widget.Toast; +import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.XMPPException; +import org.jivesoftware.smack.tcp.XMPPTCPConnection; +import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; +import org.jxmpp.jid.EntityBareJid; +import org.jxmpp.jid.impl.JidCreate; import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.Notifications; import org.mercury_im.messenger.R; import org.mercury_im.messenger.persistence.database.AppDatabase; import org.mercury_im.messenger.ui.MainActivity; +import java.io.IOException; +import java.net.InetAddress; + import javax.inject.Inject; /** @@ -25,26 +35,31 @@ import javax.inject.Inject; */ public class XmppService extends Service { - private static final String TAG = MercuryImApplication.TAG; + private static final String TAG = MercuryImApplication.TAG; - private static final String APP = "org.olomono.mercury"; - private static final String SERVICE = APP + ".XmppService"; + private static final String APP = "org.olomono.mercury"; + private static final String SERVICE = APP + ".XmppService"; - private static final String ACTION = SERVICE + ".ACTION"; - private static final String EVENT = SERVICE + ".EVENT"; - private static final String STATUS = SERVICE + ".STATUS"; + private static final String ACTION = SERVICE + ".ACTION"; + private static final String EVENT = SERVICE + ".EVENT"; + private static final String EXTRA = SERVICE + ".EXTRA"; + private static final String STATUS = SERVICE + ".STATUS"; - public static final String ACTION_START = ACTION + ".START"; - public static final String ACTION_STOP = ACTION + ".STOP"; - public static final String ACTION_CONNECT = ACTION + ".CONNECT"; - public static final String ACTION_DISCONNECT = ACTION + ".DISCONNECT"; - public static final String ACTION_PING = ACTION + ".PING"; + public static final String ACTION_START = ACTION + ".START"; + public static final String ACTION_STOP = ACTION + ".STOP"; + public static final String ACTION_CONNECT = ACTION + ".CONNECT"; + public static final String ACTION_DISCONNECT = ACTION + ".DISCONNECT"; + public static final String ACTION_PING = ACTION + ".PING"; - public static final String EVENT_INCOMING_MESSAGE = ".INCOMING_MESSAGE"; - public static final String EVENT_OUTGOING_MESSAGE = ".OUTGOING_MESSAGE"; + public static final String EVENT_INCOMING_MESSAGE = EVENT + ".INCOMING_MESSAGE"; + public static final String EVENT_OUTGOING_MESSAGE = EVENT + ".OUTGOING_MESSAGE"; - public static final String STATUS_SUCCESS = STATUS + ".SUCCESS"; - public static final String STATUS_FAILURE = STATUS + ".FAILURE"; + public static final String EXTRA_JID = EXTRA + ".JID"; + public static final String EXTRA_PASSWORD = EXTRA + ".PASSWORD"; + public static final String EXTRA_ACCOUNT_ID = EXTRA + ".ACCOUNT_ID"; + + public static final String STATUS_SUCCESS = STATUS + ".SUCCESS"; + public static final String STATUS_FAILURE = STATUS + ".FAILURE"; @Inject AppDatabase database; @@ -81,7 +96,70 @@ public class XmppService extends Service { case ACTION_STOP: stopForeground(true); break; + case ACTION_CONNECT: + String jid = intent.getStringExtra(EXTRA_JID); + EntityBareJid bareJid = JidCreate.entityBareFromOrNull(jid); + if (jid == null) { + Toast.makeText(this, "No JID provided.", Toast.LENGTH_SHORT).show(); + return START_STICKY_COMPATIBILITY; + } + String password = intent.getStringExtra(EXTRA_PASSWORD); + if (password == null) { + Toast.makeText(this, "No Password provided.", Toast.LENGTH_SHORT).show(); + return START_STICKY_COMPATIBILITY; + } + long accountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1); + if (accountId == -1) { + Toast.makeText(this, "No account ID provided.", Toast.LENGTH_SHORT).show(); + return START_STICKY_COMPATIBILITY; + } + new Thread() { + + public void run() { + + XMPPTCPConnection con = null; + try + + { + InetAddress address = InetAddress.getByName(bareJid.getDomain().toString()); + XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder() + .setXmppDomain(bareJid.asDomainBareJid()) + .setUsernameAndPassword(bareJid.getLocalpart().toString(), password) + .setHostAddress(address) + .setConnectTimeout(2 * 60 * 1000) + .build(); + con = new XMPPTCPConnection(conf); + con.connect().login(); + } catch( + XMPPException e) + + { + e.printStackTrace(); + } catch( + SmackException e) + + { + e.printStackTrace(); + } catch( + IOException e) + + { + e.printStackTrace(); + } catch( + InterruptedException e) + + { + e.printStackTrace(); + } + + connections.put(intent.getLongExtra(EXTRA_ACCOUNT_ID,-1),con); + while (true) { + + } + } + }.start(); + break; default: break; } diff --git a/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java b/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java index 643db30..3a965e7 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/MainActivity.java @@ -1,11 +1,13 @@ package org.mercury_im.messenger.ui; +import androidx.lifecycle.Observer; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.Nullable; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -55,6 +57,15 @@ public class MainActivity extends AppCompatActivity { accountRepository.insertAccount(account); } }); + + accountRepository.getAllAccounts().observe(this, new Observer>() { + @Override + public void onChanged(@Nullable List accountModels) { + if (accountModels == null || accountModels.isEmpty()) { + startActivity(new Intent(getApplicationContext(), LoginActivity.class)); + } + } + }); } @Override @@ -89,24 +100,6 @@ public class MainActivity extends AppCompatActivity { new addRosterEntry(database).execute(rosterEntry); } - private static class ifNoAccountsThen extends AsyncTask { - - private final AppDatabase database; - - public ifNoAccountsThen(AppDatabase database) { - this.database = database; - } - - @Override - protected Void doInBackground(Runnable... runnables) { - List accounts = database.accountDao().getAllAccounts().getValue(); - if (accounts == null || accounts.size() == 0) { - runnables[0].run(); - } - return null; - } - } - private static class addRosterEntry extends AsyncTask { private AppDatabase database; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java index 2814fb2..c42c71a 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.ui.chat; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import org.mercury_im.messenger.R; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java index b3f1a97..9418944 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputFragment.java @@ -1,12 +1,12 @@ package org.mercury_im.messenger.ui.chat; -import android.arch.lifecycle.Observer; -import android.arch.lifecycle.ViewModelProviders; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.Fragment; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.fragment.app.Fragment; 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/ui/chat/ChatInputViewModel.java index 789133f..33a665e 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatInputViewModel.java @@ -1,7 +1,7 @@ package org.mercury_im.messenger.ui.chat; -import android.arch.lifecycle.MutableLiveData; -import android.arch.lifecycle.ViewModel; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; public class ChatInputViewModel extends 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/ui/chat/ChatViewModel.java index 47b47e1..7791aa0 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatViewModel.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.ui.chat; -import android.arch.lifecycle.ViewModel; +import androidx.lifecycle.ViewModel; import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.persistence.database.model.Account; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/login/LoginActivity.java b/app/src/main/java/org/mercury_im/messenger/ui/login/LoginActivity.java index 803a665..9435370 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/login/LoginActivity.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/login/LoginActivity.java @@ -1,8 +1,9 @@ package org.mercury_im.messenger.ui.login; -import android.arch.lifecycle.ViewModelProviders; +import androidx.lifecycle.ViewModelProviders; +import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; @@ -14,13 +15,22 @@ import android.widget.TextView; import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.impl.JidCreate; +import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.R; +import org.mercury_im.messenger.persistence.database.model.AccountModel; +import org.mercury_im.messenger.persistence.repository.account.AccountRepository; +import org.mercury_im.messenger.service.XmppService; + +import javax.inject.Inject; /** * A login screen that offers login via email/password. */ public class LoginActivity extends AppCompatActivity implements TextView.OnEditorActionListener { + @Inject + AccountRepository accountRepository; + // UI references. private AutoCompleteTextView mJidView; private EditText mPasswordView; @@ -34,6 +44,8 @@ public class LoginActivity extends AppCompatActivity implements TextView.OnEdito super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); + MercuryImApplication.getApplication().getAppComponent().inject(this); + // Set up the login form. mJidView = findViewById(R.id.jid); mPasswordView = findViewById(R.id.password); @@ -69,22 +81,43 @@ public class LoginActivity extends AppCompatActivity implements TextView.OnEdito } private void loginDetailsEntered() { + boolean loginIntact = true; String jidInput = mJidView.getText().toString(); if (jidInput.isEmpty()) { mJidView.setError(getResources().getString(R.string.error_field_required)); + loginIntact = false; } EntityBareJid jid = asValidJidOrNull(jidInput); if (jid == null) { mJidView.setError(getResources().getString(R.string.error_invalid_jid)); + loginIntact = false; } String password = mPasswordView.getText().toString(); if (!isPasswordValid(password)) { mPasswordView.setError(getResources().getString(R.string.error_invalid_password)); + loginIntact = false; } - viewModel.login(); + if (loginIntact) { + AccountModel accountModel = new AccountModel(); + accountModel.setEnabled(true); + accountModel.setJid(jid); + accountModel.setPassword(password); + long id = accountRepository.insertAccount(accountModel); + attemptLogin(jid, password, id); + + } + } + + private void attemptLogin(EntityBareJid jid, String password, long accountId) { + Intent connectIntent = new Intent(getApplicationContext(), XmppService.class); + connectIntent.setAction(XmppService.ACTION_CONNECT); + connectIntent.putExtra(XmppService.EXTRA_JID, jid.toString()); + connectIntent.putExtra(XmppService.EXTRA_PASSWORD, password); + connectIntent.putExtra(XmppService.EXTRA_ACCOUNT_ID, accountId); + startService(connectIntent); } /** diff --git a/app/src/main/java/org/mercury_im/messenger/ui/login/LoginViewModel.java b/app/src/main/java/org/mercury_im/messenger/ui/login/LoginViewModel.java index ecadc64..9048ff6 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/login/LoginViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/login/LoginViewModel.java @@ -1,8 +1,8 @@ package org.mercury_im.messenger.ui.login; -import android.arch.lifecycle.MutableLiveData; -import android.arch.lifecycle.ViewModel; -import android.support.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; +import androidx.annotation.NonNull; import android.text.TextUtils; import org.mercury_im.messenger.persistence.database.model.AccountModel; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java index 01d7470..dcdc9a2 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterFragment.java @@ -1,11 +1,11 @@ package org.mercury_im.messenger.ui.roster; -import android.arch.lifecycle.Observer; -import android.arch.lifecycle.ViewModelProviders; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; import android.os.Bundle; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterRecyclerViewAdapter.java index 4ff5e7e..e57ec46 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterRecyclerViewAdapter.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterRecyclerViewAdapter.java @@ -1,7 +1,7 @@ package org.mercury_im.messenger.ui.roster; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterViewModel.java b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterViewModel.java index 2f6b8dd..6183321 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterViewModel.java @@ -1,9 +1,9 @@ package org.mercury_im.messenger.ui.roster; import android.app.Application; -import android.arch.lifecycle.AndroidViewModel; -import android.arch.lifecycle.LiveData; -import android.support.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; +import androidx.annotation.NonNull; import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.persistence.database.model.RosterEntryModel; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java b/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java index c8afea3..ea56bc2 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/settings/AppCompatPreferenceActivity.java @@ -3,11 +3,11 @@ package org.mercury_im.messenger.ui.settings; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceActivity; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.widget.Toolbar; +import androidx.annotation.LayoutRes; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.appcompat.widget.Toolbar; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java b/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java index 255c724..8805b3a 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/settings/SettingsActivity.java @@ -12,7 +12,7 @@ import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; -import android.support.v7.app.ActionBar; +import androidx.appcompat.app.ActionBar; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.RingtonePreference; diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 1953340..fca31c4 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -31,7 +31,7 @@ android:layout_height="wrap_content" android:orientation="vertical"> - @@ -44,9 +44,9 @@ android:maxLines="1" android:singleLine="true" /> - + - @@ -62,7 +62,7 @@ android:maxLines="1" android:singleLine="true" /> - +