From 1e1ded9795a831a5f6949363d4c583538f87f0a8 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 29 Jul 2019 22:14:35 +0200 Subject: [PATCH 1/2] Move login logic to vm --- .idea/misc.xml | 2 +- .../messenger/ui/login/LoginActivity.java | 128 ++++++---------- .../messenger/ui/login/LoginViewModel.java | 141 ++++++++++++++++++ build.gradle | 3 +- version.gradle | 21 ++- .../xmpp_android/test/BuildConfig.java | 13 ++ .../messenger/xmpp_android/BuildConfig.java | 13 ++ .../debug/aapt/AndroidManifest.xml | 11 ++ .../debug/aapt/output.json | 1 + .../debug/AndroidManifest.xml | 11 ++ .../merged_manifests/debug/output.json | 1 + .../debugAndroidTest/AndroidManifest.xml | 22 +++ .../debugAndroidTest/output.json | 1 + .../logs/manifest-merger-debug-report.txt | 37 +++++ 14 files changed, 314 insertions(+), 91 deletions(-) create mode 100644 xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java create mode 100644 xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java create mode 100644 xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml create mode 100644 xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json create mode 100644 xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml create mode 100644 xmpp_android/build/intermediates/merged_manifests/debug/output.json create mode 100644 xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml create mode 100644 xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json create mode 100644 xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt diff --git a/.idea/misc.xml b/.idea/misc.xml index 2326c24..84da703 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file 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 ca49e41..0dce161 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 @@ -10,6 +10,7 @@ import android.widget.Button; import android.widget.TextView; import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.google.android.material.textfield.TextInputEditText; @@ -44,9 +45,6 @@ import butterknife.ButterKnife; */ public class LoginActivity extends BindingActivity implements TextView.OnEditorActionListener { - @Inject - AccountRepository accountRepository; - // UI references. @BindView(R.id.jid) TextInputEditText mJidView; @@ -72,13 +70,50 @@ public class LoginActivity extends BindingActivity implements TextView.OnEditorA viewModel = ViewModelProviders.of(this).get(LoginViewModel.class); displayCredentials(viewModel.getAccount()); + viewModel.getJidError().observe(this, jidError -> { + if (jidError == null) return; + String errorMessage = null; + switch (jidError) { + case none: + break; + case emptyJid: + errorMessage = getResources().getString(R.string.error_field_required); + break; + case invalidJid: + errorMessage = getResources().getString(R.string.error_invalid_jid); + break; + case unknownJid: + errorMessage = "Unknown Jid!"; + } + mJidView.setError(errorMessage); + }); + + viewModel.getPasswordError().observe(this, passwordError -> { + if (passwordError == null) return; + String errorMessage = null; + switch (passwordError) { + case none: + break; + case emptyPassword: + errorMessage = getResources().getString(R.string.error_field_required); + break; + case invalidPassword: + errorMessage = getResources().getString(R.string.error_invalid_password); + break; + case incorrectPassword: + errorMessage = getResources().getString(R.string.error_incorrect_password); + break; + } + mPasswordView.setError(errorMessage); + }); + mJidView.setOnEditorActionListener(this); mPasswordView.setOnEditorActionListener(this); mSignInView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { - loginDetailsEntered(); + viewModel.loginDetailsEntered(); } }); mSignInView.setEnabled(false); @@ -87,12 +122,14 @@ public class LoginActivity extends BindingActivity implements TextView.OnEditorA @Override protected void onServiceBound() { super.onServiceBound(); + viewModel.setConnectionService(connectionService); mSignInView.setEnabled(true); } @Override protected void onServiceUnbound() { super.onServiceUnbound(); + viewModel.setConnectionService(null); mSignInView.setEnabled(false); } @@ -112,88 +149,7 @@ public class LoginActivity extends BindingActivity implements TextView.OnEditorA }); } - // TODO: Move to ViewModel - 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; - } - - if (loginIntact) { - RoomAccountModel accountModel = new RoomAccountModel(); - accountModel.setEnabled(true); - accountModel.setJid(jid); - accountModel.setPassword(password); - long id = accountRepository.insertAccount(accountModel); - accountModel.setId(id); - Log.d(MercuryImApplication.TAG, "LoginActivity.loginDetailsEntered: Account " + id + " inserted."); - attemptLogin(accountModel); - } - } - - private void attemptLogin(AccountModel accountModel) { - XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder() - .setHost(accountModel.getJid().getDomain().toString()) - .setXmppAddressAndPassword(accountModel.getJid(), accountModel.getPassword()) - .setConnectTimeout(2 * 60 * 1000) - .build(); - new Thread() { - @Override - public void run() { - try { - XMPPTCPConnection connection = new XMPPTCPConnection(configuration); - connection.setUseStreamManagementResumption(true); - connection.setUseStreamManagement(true); - MercuryConnection mercuryConnection = new AndroidMercuryConnection(connection, accountModel.getId()); - connectionService.putConnection(accountModel.getId(), mercuryConnection); - mercuryConnection.setRosterHandler(new RoomRosterHandler(mercuryConnection)); - mercuryConnection.setPlainMessageHandler(new RoomPlainMessageHandler(accountModel.getId())); - - connection.connect().login(); - Log.d(MercuryImApplication.TAG, "Logged in for " + accountModel.getJid().toString()); - } catch (XmppStringprepException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (SmackException e) { - e.printStackTrace(); - } catch (XMPPException e) { - e.printStackTrace(); - } - } - }.start(); - super.finish(); - } - - /** - * Try to parse the input string into a {@link EntityBareJid} and return it. - * Return null on failure. - * @param input input string - * @return valid jid or null - */ - private EntityBareJid asValidJidOrNull(String input) { - return JidCreate.entityBareFromOrNull(input); - } - - private boolean isPasswordValid(String password) { - return !password.isEmpty(); - } @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { @@ -207,7 +163,7 @@ public class LoginActivity extends BindingActivity implements TextView.OnEditorA case R.id.password: if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL) { - loginDetailsEntered(); + viewModel.loginDetailsEntered(); return true; } } 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 ca4e599..33074e5 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,12 +1,31 @@ package org.mercury_im.messenger.ui.login; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import androidx.annotation.NonNull; import android.text.TextUtils; +import android.util.Log; +import org.jivesoftware.smack.SmackException; +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.jxmpp.stringprep.XmppStringprepException; +import org.mercury_im.messenger.AndroidMercuryConnection; +import org.mercury_im.messenger.MercuryImApplication; +import org.mercury_im.messenger.R; +import org.mercury_im.messenger.handler.RoomPlainMessageHandler; +import org.mercury_im.messenger.handler.RoomRosterHandler; +import org.mercury_im.messenger.persistence.model.AccountModel; import org.mercury_im.messenger.persistence.room.model.RoomAccountModel; import org.mercury_im.messenger.persistence.repository.AccountRepository; +import org.mercury_im.messenger.service.XmppConnectionService; +import org.mercury_im.messenger.xmpp_core.MercuryConnection; + +import java.io.IOException; import javax.inject.Inject; @@ -16,6 +35,14 @@ public class LoginViewModel extends ViewModel { @Inject AccountRepository accountRepository; + private XmppConnectionService connectionService; + + private String jid; + private String password; + + private MutableLiveData jidError = new MutableLiveData<>(); + private MutableLiveData passwordError = new MutableLiveData<>(); + private MutableLiveData account = new MutableLiveData<>(); public LoginViewModel() { @@ -23,6 +50,50 @@ public class LoginViewModel extends ViewModel { init(new RoomAccountModel()); } + public enum JidError { + none, + emptyJid, + invalidJid, + unknownJid + } + + public enum PasswordError { + none, + emptyPassword, + invalidPassword, + incorrectPassword + } + + public void onJidInputChanged(String input) { + this.jid = input; + } + + public void onPasswordInputChanged(String input) { + this.password = input; + } + + public LiveData getJidError() { + return jidError; + } + + public LiveData getPasswordError() { + return passwordError; + } + + /** + * Try to parse the input string into a {@link EntityBareJid} and return it. + * Return null on failure. + * @param input input string + * @return valid jid or null + */ + private EntityBareJid asValidJidOrNull(String input) { + return JidCreate.entityBareFromOrNull(input); + } + + private boolean isPasswordValid(String password) { + return !password.isEmpty(); + } + public void init(@NonNull RoomAccountModel account) { this.account.setValue(account); } @@ -37,4 +108,74 @@ public class LoginViewModel extends ViewModel { accountRepository.insertAccount(account); } } + + // TODO: Move to ViewModel + public void loginDetailsEntered() { + boolean loginIntact = true; + if (jid.isEmpty()) { + jidError.postValue(JidError.emptyJid); + loginIntact = false; + } + + EntityBareJid bareJid = asValidJidOrNull(jid); + if (bareJid == null) { + jidError.postValue(JidError.invalidJid); + loginIntact = false; + } + + if (!isPasswordValid(password)) { + passwordError.postValue(PasswordError.invalidPassword); + loginIntact = false; + } + + if (loginIntact) { + RoomAccountModel accountModel = new RoomAccountModel(); + accountModel.setEnabled(true); + accountModel.setJid(bareJid); + accountModel.setPassword(password); + long id = accountRepository.insertAccount(accountModel); + accountModel.setId(id); + Log.d(MercuryImApplication.TAG, "LoginActivity.loginDetailsEntered: Account " + id + " inserted."); + attemptLogin(accountModel); + } + } + + private void attemptLogin(AccountModel accountModel) { + XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder() + .setHost(accountModel.getJid().getDomain().toString()) + .setXmppAddressAndPassword(accountModel.getJid(), accountModel.getPassword()) + .setConnectTimeout(2 * 60 * 1000) + .build(); + new Thread() { + @Override + public void run() { + try { + XMPPTCPConnection connection = new XMPPTCPConnection(configuration); + connection.setUseStreamManagementResumption(true); + connection.setUseStreamManagement(true); + MercuryConnection mercuryConnection = new AndroidMercuryConnection(connection, accountModel.getId()); + connectionService.putConnection(accountModel.getId(), mercuryConnection); + mercuryConnection.setRosterHandler(new RoomRosterHandler(mercuryConnection)); + mercuryConnection.setPlainMessageHandler(new RoomPlainMessageHandler(accountModel.getId())); + + connection.connect().login(); + Log.d(MercuryImApplication.TAG, "Logged in for " + accountModel.getJid().toString()); + } catch (XmppStringprepException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (SmackException e) { + e.printStackTrace(); + } catch (XMPPException e) { + e.printStackTrace(); + } + } + }.start(); + } + + public void setConnectionService(XmppConnectionService connectionService) { + this.connectionService = connectionService; + } } diff --git a/build.gradle b/build.gradle index 41794c9..0cfbae2 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' + classpath 'com.android.tools.build:gradle:3.4.2' // NOTE: Do not place your application dependencies here; they belong @@ -25,6 +25,7 @@ allprojects { repositories { google() jcenter() + mavenLocal() maven { url 'https://igniterealtime.org/repo/' } diff --git a/version.gradle b/version.gradle index 4ddd8bf..68be4ca 100644 --- a/version.gradle +++ b/version.gradle @@ -3,19 +3,34 @@ ext { // Quickly switch between unique and normal releases using the toggle below // Version Strings for non-unique releases - /* - smackVersion = "4.4.0-alpha2-SNAPSHOT" + //* + smackVersion = "4.4.0-alpha3-SNAPSHOT" smackAndroidVersion = smackVersion smackAndroidExtensionsVersion = smackVersion + smackBoshVersion = smackVersion + smackCompressionJzlibVersion = smackVersion smackCoreVersion = smackVersion + smackDebugVersion = smackVersion + smackDebugSlf4jVersion = smackVersion smackExperimentalVersion = smackVersion smackExtensionsVersion = smackVersion smackImVersion = smackVersion + smackIntegrationTestVersion = smackVersion + smackJava7Version = smackVersion + smackJingleOldVersion = smackVersion + smackLegacyVersion = smackVersion smackOmemoVersion = smackVersion smackOmemoSignalVersion = smackVersion + smackOmemoSignalIntegrationTestVersion = smackVersion smackOpenpgpVersion = smackVersion - smackResolverMiniDnsVersion = smackVersion + smackReplVersion = smackVersion + smackResolverDnsjavaVersion = smackVersion + smackResolverJavaxVersion = smackVersion + smackResolverMinidnsVersion = smackVersion + smackResolverMinidnsDoxVersion = smackVersion + smackSaslJavaxVersion = smackVersion + smackSaslProvidedVersion = smackVersion smackTcpVersion = smackVersion /*/ diff --git a/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java b/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java new file mode 100644 index 0000000..565dcfd --- /dev/null +++ b/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java @@ -0,0 +1,13 @@ +/** + * Automatically generated file. DO NOT MODIFY + */ +package org.mercury_im.messenger.xmpp_android.test; + +public final class BuildConfig { + public static final boolean DEBUG = Boolean.parseBoolean("true"); + public static final String APPLICATION_ID = "org.mercury_im.messenger.xmpp_android.test"; + public static final String BUILD_TYPE = "debug"; + public static final String FLAVOR = ""; + public static final int VERSION_CODE = 1; + public static final String VERSION_NAME = "1.0"; +} diff --git a/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java b/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java new file mode 100644 index 0000000..acfa4c7 --- /dev/null +++ b/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java @@ -0,0 +1,13 @@ +/** + * Automatically generated file. DO NOT MODIFY + */ +package org.mercury_im.messenger.xmpp_android; + +public final class BuildConfig { + public static final boolean DEBUG = Boolean.parseBoolean("true"); + public static final String APPLICATION_ID = "org.mercury_im.messenger.xmpp_android"; + public static final String BUILD_TYPE = "debug"; + public static final String FLAVOR = ""; + public static final int VERSION_CODE = 1; + public static final String VERSION_NAME = "1.0"; +} diff --git a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml new file mode 100644 index 0000000..bf676c4 --- /dev/null +++ b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json new file mode 100644 index 0000000..ad8a7c1 --- /dev/null +++ b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"org.mercury_im.messenger.xmpp_android","split":""}}] \ No newline at end of file diff --git a/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml b/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml new file mode 100644 index 0000000..bf676c4 --- /dev/null +++ b/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debug/output.json b/xmpp_android/build/intermediates/merged_manifests/debug/output.json new file mode 100644 index 0000000..4c648d7 --- /dev/null +++ b/xmpp_android/build/intermediates/merged_manifests/debug/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug.aar","fullName":"debug","baseName":"debug"},"path":"../../library_manifest/debug/AndroidManifest.xml","properties":{"packageId":"org.mercury_im.messenger.xmpp_android","split":""}}] \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml new file mode 100644 index 0000000..3354089 --- /dev/null +++ b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json new file mode 100644 index 0000000..70b0afb --- /dev/null +++ b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json @@ -0,0 +1 @@ +[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug-androidTest.apk","fullName":"debugAndroidTest","baseName":"debug-androidTest"},"path":"AndroidManifest.xml","properties":{}}] \ No newline at end of file diff --git a/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt b/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt new file mode 100644 index 0000000..ff328e9 --- /dev/null +++ b/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt @@ -0,0 +1,37 @@ +-- Merging decision tree log --- +manifest +ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 + package + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:2:5-52 + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + android:versionName + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + android:versionCode + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + xmlns:android + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:11-69 +uses-sdk +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml reason: use-sdk injection requested +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml +INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + android:targetSdkVersion + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + android:minSdkVersion + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml + INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml From ceac922aab3da0e1d254561daa1729580ca939c8 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Wed, 31 Jul 2019 17:44:10 +0200 Subject: [PATCH 2/2] Avatar --- .idea/misc.xml | 2 +- app/build.gradle | 3 + .../messenger/di/component/AppComponent.java | 3 + .../messenger/di/module/RepositoryModule.java | 9 ++ .../messenger/di/module/RoomModule.java | 7 ++ .../messenger/handler/AvatarHandler.java | 30 ++++++- .../messenger/ui/login/LoginActivity.java | 20 ++++- .../messenger/ui/login/LoginViewModel.java | 3 +- .../messenger/util/TextChangedListener.java | 16 ++++ .../store/RosterStore_MembersInjector.java | 36 ++++++++ .../1.json | 71 ++++++++++++++- .../persistence/room/AppDatabase.java | 17 ++-- .../persistence/room/dao/AvatarDao.java | 28 ++++++ .../room/model/RoomAvatarModel.java | 87 +++++++++++++++++++ .../room/repository/IAvatarRepository.java | 40 +++++++++ .../persistence/model/AvatarModel.java | 20 +++++ .../repository/AvatarRepository.java | 17 ++++ .../xmpp_android/test/BuildConfig.java | 13 --- .../messenger/xmpp_android/BuildConfig.java | 13 --- .../debug/aapt/AndroidManifest.xml | 11 --- .../debug/aapt/output.json | 1 - .../debug/AndroidManifest.xml | 11 --- .../merged_manifests/debug/output.json | 1 - .../debugAndroidTest/AndroidManifest.xml | 22 ----- .../debugAndroidTest/output.json | 1 - .../logs/manifest-merger-debug-report.txt | 37 -------- 26 files changed, 391 insertions(+), 128 deletions(-) create mode 100644 app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java create mode 100644 common/build/classes/java/main/org/mercury_im/messenger/persistence/store/RosterStore_MembersInjector.java create mode 100644 persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/AvatarDao.java create mode 100644 persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/model/RoomAvatarModel.java create mode 100644 persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IAvatarRepository.java create mode 100644 persistence/src/main/java/org/mercury_im/messenger/persistence/model/AvatarModel.java create mode 100644 persistence/src/main/java/org/mercury_im/messenger/persistence/repository/AvatarRepository.java delete mode 100644 xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java delete mode 100644 xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java delete mode 100644 xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml delete mode 100644 xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json delete mode 100644 xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml delete mode 100644 xmpp_android/build/intermediates/merged_manifests/debug/output.json delete mode 100644 xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml delete mode 100644 xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json delete mode 100644 xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt diff --git a/.idea/misc.xml b/.idea/misc.xml index 84da703..2326c24 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 535192a..f56d5df 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -106,4 +106,7 @@ dependencies { implementation 'de.hdodenhof:circleimageview:2.2.0' implementation "org.igniterealtime.smack:smack-android-extensions:$smackAndroidExtensionsVersion" + configurations { + all*.exclude group: 'xpp3', module: 'xpp3' + } } diff --git a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java b/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java index 997d7f7..d96232c 100644 --- a/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java +++ b/app/src/main/java/org/mercury_im/messenger/di/component/AppComponent.java @@ -4,6 +4,7 @@ import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.di.module.AppModule; import org.mercury_im.messenger.di.module.RepositoryModule; import org.mercury_im.messenger.di.module.RoomModule; +import org.mercury_im.messenger.handler.AvatarHandler; import org.mercury_im.messenger.handler.RoomPlainMessageHandler; import org.mercury_im.messenger.handler.RoomRosterHandler; import org.mercury_im.messenger.service.XmppConnectionService; @@ -67,4 +68,6 @@ public interface AppComponent { void inject(RoomRosterHandler roomRosterHandler); void inject(RoomPlainMessageHandler messageHandler); + + void inject(AvatarHandler avatarHandler); } diff --git a/app/src/main/java/org/mercury_im/messenger/di/module/RepositoryModule.java b/app/src/main/java/org/mercury_im/messenger/di/module/RepositoryModule.java index f672c49..7497718 100644 --- a/app/src/main/java/org/mercury_im/messenger/di/module/RepositoryModule.java +++ b/app/src/main/java/org/mercury_im/messenger/di/module/RepositoryModule.java @@ -1,18 +1,21 @@ package org.mercury_im.messenger.di.module; import org.mercury_im.messenger.persistence.repository.AccountRepository; +import org.mercury_im.messenger.persistence.repository.AvatarRepository; import org.mercury_im.messenger.persistence.repository.ChatRepository; import org.mercury_im.messenger.persistence.repository.ContactAndEntityRepository; import org.mercury_im.messenger.persistence.repository.ContactRepository; import org.mercury_im.messenger.persistence.repository.EntityRepository; import org.mercury_im.messenger.persistence.repository.MessageRepository; import org.mercury_im.messenger.persistence.room.dao.AccountDao; +import org.mercury_im.messenger.persistence.room.dao.AvatarDao; import org.mercury_im.messenger.persistence.room.dao.ChatDao; import org.mercury_im.messenger.persistence.room.dao.ContactAndEntityDao; import org.mercury_im.messenger.persistence.room.dao.ContactDao; import org.mercury_im.messenger.persistence.room.dao.EntityDao; import org.mercury_im.messenger.persistence.room.dao.MessageDao; import org.mercury_im.messenger.persistence.room.repository.IAccountRepository; +import org.mercury_im.messenger.persistence.room.repository.IAvatarRepository; import org.mercury_im.messenger.persistence.room.repository.IChatRepository; import org.mercury_im.messenger.persistence.room.repository.IContactAndEntityRepository; import org.mercury_im.messenger.persistence.room.repository.IContactRepository; @@ -62,4 +65,10 @@ public class RepositoryModule { ContactAndEntityRepository provideContactAndEntityRepository(ContactAndEntityDao dao) { return new IContactAndEntityRepository(dao); } + + @Singleton + @Provides + AvatarRepository provideAvatarRepository(AvatarDao avatarDao) { + return new IAvatarRepository(avatarDao); + } } diff --git a/app/src/main/java/org/mercury_im/messenger/di/module/RoomModule.java b/app/src/main/java/org/mercury_im/messenger/di/module/RoomModule.java index 761c7e4..a441dc2 100644 --- a/app/src/main/java/org/mercury_im/messenger/di/module/RoomModule.java +++ b/app/src/main/java/org/mercury_im/messenger/di/module/RoomModule.java @@ -3,6 +3,7 @@ package org.mercury_im.messenger.di.module; import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.persistence.room.AppDatabase; import org.mercury_im.messenger.persistence.room.dao.AccountDao; +import org.mercury_im.messenger.persistence.room.dao.AvatarDao; import org.mercury_im.messenger.persistence.room.dao.ChatDao; import org.mercury_im.messenger.persistence.room.dao.ContactAndEntityDao; import org.mercury_im.messenger.persistence.room.dao.ContactDao; @@ -69,4 +70,10 @@ public class RoomModule { ContactAndEntityDao provideContactAndEntityDao() { return mAppDatabase.contactAndEntityDao(); } + + @Singleton + @Provides + AvatarDao providerAvatarDao() { + return mAppDatabase.avatarDao(); + } } diff --git a/app/src/main/java/org/mercury_im/messenger/handler/AvatarHandler.java b/app/src/main/java/org/mercury_im/messenger/handler/AvatarHandler.java index e4cb1b3..4e22f29 100644 --- a/app/src/main/java/org/mercury_im/messenger/handler/AvatarHandler.java +++ b/app/src/main/java/org/mercury_im/messenger/handler/AvatarHandler.java @@ -1,5 +1,33 @@ package org.mercury_im.messenger.handler; -public class AvatarHandler { +import org.jivesoftware.smackx.avatar.UserAvatarManager; +import org.jivesoftware.smackx.avatar.element.MetadataExtension; +import org.jivesoftware.smackx.avatar.listener.AvatarListener; +import org.jxmpp.jid.EntityBareJid; +import org.mercury_im.messenger.MercuryImApplication; +import org.mercury_im.messenger.persistence.repository.AvatarRepository; +import org.mercury_im.messenger.persistence.room.model.RoomAvatarModel; +import javax.inject.Inject; + +public class AvatarHandler implements AvatarListener { + + private final long accountId; + + @Inject + private AvatarRepository avatarRepository; + + private UserAvatarManager avatarManager; + + public AvatarHandler(long accountId, UserAvatarManager avatarManager) { + this.accountId = accountId; + this.avatarManager = avatarManager; + + MercuryImApplication.getApplication().getAppComponent().inject(this); + } + + @Override + public void onAvatarUpdateReceived(EntityBareJid user, MetadataExtension metadata) { + + } } 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 0dce161..83d93c9 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,6 +1,8 @@ package org.mercury_im.messenger.ui.login; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.View; @@ -31,6 +33,7 @@ import org.mercury_im.messenger.persistence.repository.AccountRepository; import org.mercury_im.messenger.persistence.room.model.RoomAccountModel; import org.mercury_im.messenger.ui.BindingActivity; import org.mercury_im.messenger.AndroidMercuryConnection; +import org.mercury_im.messenger.util.TextChangedListener; import org.mercury_im.messenger.xmpp_core.MercuryConnection; import java.io.IOException; @@ -110,12 +113,23 @@ public class LoginActivity extends BindingActivity implements TextView.OnEditorA mJidView.setOnEditorActionListener(this); mPasswordView.setOnEditorActionListener(this); - mSignInView.setOnClickListener(new OnClickListener() { + mJidView.addTextChangedListener(new TextChangedListener() { @Override - public void onClick(View view) { - viewModel.loginDetailsEntered(); + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + viewModel.onJidInputChanged(charSequence.toString()); + Log.d("Mercury", "onTextChanged"); } }); + + mPasswordView.addTextChangedListener(new TextChangedListener() { + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + viewModel.onPasswordInputChanged(charSequence.toString()); + Log.d("Mercury", "onTextChanged"); + } + }); + + mSignInView.setOnClickListener(view -> viewModel.loginDetailsEntered()); mSignInView.setEnabled(false); } 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 33074e5..4c84afe 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 @@ -47,6 +47,7 @@ public class LoginViewModel extends ViewModel { public LoginViewModel() { super(); + MercuryImApplication.getApplication().getAppComponent().inject(this); init(new RoomAccountModel()); } @@ -66,6 +67,7 @@ public class LoginViewModel extends ViewModel { public void onJidInputChanged(String input) { this.jid = input; + } public void onPasswordInputChanged(String input) { @@ -109,7 +111,6 @@ public class LoginViewModel extends ViewModel { } } - // TODO: Move to ViewModel public void loginDetailsEntered() { boolean loginIntact = true; if (jid.isEmpty()) { diff --git a/app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java b/app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java new file mode 100644 index 0000000..c38f7a1 --- /dev/null +++ b/app/src/main/java/org/mercury_im/messenger/util/TextChangedListener.java @@ -0,0 +1,16 @@ +package org.mercury_im.messenger.util; + +import android.text.Editable; +import android.text.TextWatcher; + +public abstract class TextChangedListener implements TextWatcher { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + + } +} diff --git a/common/build/classes/java/main/org/mercury_im/messenger/persistence/store/RosterStore_MembersInjector.java b/common/build/classes/java/main/org/mercury_im/messenger/persistence/store/RosterStore_MembersInjector.java new file mode 100644 index 0000000..0f80633 --- /dev/null +++ b/common/build/classes/java/main/org/mercury_im/messenger/persistence/store/RosterStore_MembersInjector.java @@ -0,0 +1,36 @@ +package org.mercury_im.messenger.persistence.store; + +import dagger.MembersInjector; +import javax.annotation.Generated; +import javax.inject.Provider; +import org.mercury_im.messenger.persistence.repository.ContactRepository; + +@Generated( + value = "dagger.internal.codegen.ComponentProcessor", + comments = "https://dagger.dev" +) +@SuppressWarnings({ + "unchecked", + "rawtypes" +}) +public final class RosterStore_MembersInjector implements MembersInjector { + private final Provider contactRepositoryProvider; + + public RosterStore_MembersInjector(Provider contactRepositoryProvider) { + this.contactRepositoryProvider = contactRepositoryProvider; + } + + public static MembersInjector create( + Provider contactRepositoryProvider) { + return new RosterStore_MembersInjector(contactRepositoryProvider);} + + @Override + public void injectMembers(RosterStore instance) { + injectContactRepository(instance, contactRepositoryProvider.get()); + } + + public static void injectContactRepository(RosterStore instance, + ContactRepository contactRepository) { + instance.contactRepository = contactRepository; + } +} diff --git a/persistence-room/schemas/org.mercury_im.messenger.persistence.room.AppDatabase/1.json b/persistence-room/schemas/org.mercury_im.messenger.persistence.room.AppDatabase/1.json index 0841913..64be19d 100644 --- a/persistence-room/schemas/org.mercury_im.messenger.persistence.room.AppDatabase/1.json +++ b/persistence-room/schemas/org.mercury_im.messenger.persistence.room.AppDatabase/1.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "1149b7d295726ec2043486e660dcf75d", + "identityHash": "6f81947a36983067c387ec3ce77eb1cc", "entities": [ { "tableName": "contacts", @@ -371,12 +371,79 @@ ] } ] + }, + { + "tableName": "avatars", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`pk_avatar_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `fk_entity_id` INTEGER NOT NULL, `sha1sum` TEXT, `bytes` BLOB, FOREIGN KEY(`fk_entity_id`) REFERENCES `entities`(`pk_entity_id`) ON UPDATE NO ACTION ON DELETE RESTRICT )", + "fields": [ + { + "fieldPath": "avatarId", + "columnName": "pk_avatar_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entityId", + "columnName": "fk_entity_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "sha1sum", + "columnName": "sha1sum", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "bytes", + "columnName": "bytes", + "affinity": "BLOB", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "pk_avatar_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_avatars_pk_avatar_id", + "unique": false, + "columnNames": [ + "pk_avatar_id" + ], + "createSql": "CREATE INDEX `index_avatars_pk_avatar_id` ON `${TABLE_NAME}` (`pk_avatar_id`)" + }, + { + "name": "index_avatars_fk_entity_id", + "unique": true, + "columnNames": [ + "fk_entity_id" + ], + "createSql": "CREATE UNIQUE INDEX `index_avatars_fk_entity_id` ON `${TABLE_NAME}` (`fk_entity_id`)" + } + ], + "foreignKeys": [ + { + "table": "entities", + "onDelete": "RESTRICT", + "onUpdate": "NO ACTION", + "columns": [ + "fk_entity_id" + ], + "referencedColumns": [ + "pk_entity_id" + ] + } + ] } ], "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1149b7d295726ec2043486e660dcf75d')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6f81947a36983067c387ec3ce77eb1cc')" ] } } \ No newline at end of file diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/AppDatabase.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/AppDatabase.java index a57b6b8..974d0d2 100644 --- a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/AppDatabase.java +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/AppDatabase.java @@ -10,42 +10,37 @@ import androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; import org.mercury_im.messenger.persistence.room.dao.AccountDao; +import org.mercury_im.messenger.persistence.room.dao.AvatarDao; import org.mercury_im.messenger.persistence.room.dao.ChatDao; import org.mercury_im.messenger.persistence.room.dao.ContactAndEntityDao; import org.mercury_im.messenger.persistence.room.dao.ContactDao; import org.mercury_im.messenger.persistence.room.dao.EntityDao; import org.mercury_im.messenger.persistence.room.dao.MessageDao; import org.mercury_im.messenger.persistence.room.model.RoomAccountModel; +import org.mercury_im.messenger.persistence.room.model.RoomAvatarModel; import org.mercury_im.messenger.persistence.room.model.RoomChatModel; import org.mercury_im.messenger.persistence.room.model.RoomContactModel; import org.mercury_im.messenger.persistence.room.model.RoomEntityModel; import org.mercury_im.messenger.persistence.room.model.RoomMessageModel; -@Database(version = 2, +@Database(version = 1, entities = { RoomContactModel.class, RoomAccountModel.class, RoomChatModel.class, RoomMessageModel.class, - RoomEntityModel.class + RoomEntityModel.class, + RoomAvatarModel.class }) public abstract class AppDatabase extends RoomDatabase { private static final String DB_NAME = "mercury_db"; private static AppDatabase INSTANCE; - static Migration m1_2 = new Migration(1, 2) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - database.execSQL("ALTER TABLE accounts ADD COLUMN state TEXT"); - } - }; - public static AppDatabase getDatabase(final Context context) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DB_NAME) - .addMigrations(m1_2) .build(); } return INSTANCE; @@ -62,4 +57,6 @@ public abstract class AppDatabase extends RoomDatabase { public abstract EntityDao entityDao(); public abstract ContactAndEntityDao contactAndEntityDao(); + + public abstract AvatarDao avatarDao(); } diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/AvatarDao.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/AvatarDao.java new file mode 100644 index 0000000..2740d18 --- /dev/null +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/dao/AvatarDao.java @@ -0,0 +1,28 @@ +package org.mercury_im.messenger.persistence.room.dao; + +import androidx.annotation.WorkerThread; +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Query; +import androidx.room.TypeConverters; + +import org.jxmpp.jid.EntityBareJid; +import org.mercury_im.messenger.persistence.room.model.RoomAvatarModel; +import org.mercury_im.messenger.persistence.room.type_converter.EntityBareJidConverter; + +@Dao +@TypeConverters(EntityBareJidConverter.class) +@WorkerThread +public interface AvatarDao extends BaseDao { + + @Query("SELECT * FROM avatars WHERE pk_avatar_id = :avatarId") + LiveData getAvatarById(long avatarId); + + @Query("SELECT * FROM avatars WHERE fk_entity_id = :entityId") + LiveData getAvatarByEntityId(long entityId); + + @Query("SELECT avatars.* " + + "FROM avatars INNER JOIN entities ON avatars.fk_entity_id = entities.pk_entity_id " + + "WHERE entities.jid = :jid") + LiveData getAvatarByJid(EntityBareJid jid); +} diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/model/RoomAvatarModel.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/model/RoomAvatarModel.java new file mode 100644 index 0000000..17dd353 --- /dev/null +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/model/RoomAvatarModel.java @@ -0,0 +1,87 @@ +package org.mercury_im.messenger.persistence.room.model; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.ForeignKey; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +import org.mercury_im.messenger.persistence.model.AvatarModel; + +import static androidx.room.ForeignKey.RESTRICT; +import static org.mercury_im.messenger.persistence.room.model.RoomAvatarModel.KEY_ENTITY_ID; +import static org.mercury_im.messenger.persistence.room.model.RoomAvatarModel.KEY_ID; +import static org.mercury_im.messenger.persistence.room.model.RoomAvatarModel.TABLE; + +@Entity(tableName = TABLE, + indices = { + @Index(value = KEY_ID), + @Index(value = KEY_ENTITY_ID, unique = true) + }, + foreignKeys = { + @ForeignKey(entity = RoomEntityModel.class, + parentColumns = RoomEntityModel.KEY_ID, + childColumns = KEY_ENTITY_ID, + onDelete = RESTRICT) + }) +public class RoomAvatarModel implements AvatarModel { + + public static final String TABLE = "avatars"; + public static final String KEY_ID = "pk_avatar_id"; + public static final String KEY_ENTITY_ID = "fk_entity_id"; + public static final String KEY_SHA1_SUM = "sha1sum"; + public static final String KEY_BYTES = "bytes"; + + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = KEY_ID) + private long avatarId; + + @ColumnInfo(name = KEY_ENTITY_ID) + private long entityId; + + @ColumnInfo(name = KEY_SHA1_SUM) + private String sha1Sum; + + @ColumnInfo(name = KEY_BYTES) + private byte[] bytes; + + @Override + public long getAvatarId() { + return avatarId; + } + + @Override + public void setAvatarId(long id) { + this.avatarId = id; + } + + @Override + public long entityId() { + return entityId; + } + + @Override + public void setEntityId(long entityId) { + this.entityId = entityId; + } + + @Override + public String getSha1Sum() { + return sha1Sum; + } + + @Override + public void setSha1Sum(String sha1Sum) { + this.sha1Sum = sha1Sum; + } + + @Override + public byte[] getBytes() { + return bytes.clone(); + } + + @Override + public void setBytes(byte[] bytes) { + this.bytes = bytes; + } +} diff --git a/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IAvatarRepository.java b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IAvatarRepository.java new file mode 100644 index 0000000..292c293 --- /dev/null +++ b/persistence-room/src/main/java/org/mercury_im/messenger/persistence/room/repository/IAvatarRepository.java @@ -0,0 +1,40 @@ +package org.mercury_im.messenger.persistence.room.repository; + +import androidx.lifecycle.LiveData; + +import org.jxmpp.jid.EntityBareJid; +import org.mercury_im.messenger.persistence.repository.AvatarRepository; +import org.mercury_im.messenger.persistence.room.dao.AvatarDao; +import org.mercury_im.messenger.persistence.room.model.RoomAvatarModel; + +import javax.inject.Inject; + +public class IAvatarRepository implements AvatarRepository { + + private final AvatarDao dao; + + @Inject + public IAvatarRepository(AvatarDao dao) { + this.dao = dao; + } + + @Override + public LiveData getAvatarById(long avatarId) { + return dao.getAvatarById(avatarId); + } + + @Override + public LiveData getAvatarByEntityId(long entityId) { + return dao.getAvatarByEntityId(entityId); + } + + @Override + public LiveData getAvatarByJid(EntityBareJid jid) { + return dao.getAvatarByJid(jid); + } + + @Override + public long updateOrInsertAvatar(RoomAvatarModel avatarModel) { + return dao.insert(avatarModel); + } +} diff --git a/persistence/src/main/java/org/mercury_im/messenger/persistence/model/AvatarModel.java b/persistence/src/main/java/org/mercury_im/messenger/persistence/model/AvatarModel.java new file mode 100644 index 0000000..50a3e00 --- /dev/null +++ b/persistence/src/main/java/org/mercury_im/messenger/persistence/model/AvatarModel.java @@ -0,0 +1,20 @@ +package org.mercury_im.messenger.persistence.model; + +public interface AvatarModel { + + long getAvatarId(); + + void setAvatarId(long id); + + long entityId(); + + void setEntityId(long entityId); + + String getSha1Sum(); + + void setSha1Sum(String sha1Sum); + + byte[] getBytes(); + + void setBytes(byte[] bytes); +} diff --git a/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/AvatarRepository.java b/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/AvatarRepository.java new file mode 100644 index 0000000..1219c09 --- /dev/null +++ b/persistence/src/main/java/org/mercury_im/messenger/persistence/repository/AvatarRepository.java @@ -0,0 +1,17 @@ +package org.mercury_im.messenger.persistence.repository; + +import androidx.lifecycle.LiveData; + +import org.jxmpp.jid.EntityBareJid; +import org.mercury_im.messenger.persistence.model.AvatarModel; + +public interface AvatarRepository { + + LiveData getAvatarById(long avatarId); + + LiveData getAvatarByEntityId(long entityId); + + LiveData getAvatarByJid(EntityBareJid jid);s + + long updateOrInsertAvatar(E avatarModel); +} diff --git a/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java b/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java deleted file mode 100644 index 565dcfd..0000000 --- a/xmpp_android/build/generated/source/buildConfig/androidTest/debug/org/mercury_im/messenger/xmpp_android/test/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package org.mercury_im.messenger.xmpp_android.test; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "org.mercury_im.messenger.xmpp_android.test"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java b/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java deleted file mode 100644 index acfa4c7..0000000 --- a/xmpp_android/build/generated/source/buildConfig/debug/org/mercury_im/messenger/xmpp_android/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package org.mercury_im.messenger.xmpp_android; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "org.mercury_im.messenger.xmpp_android"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml deleted file mode 100644 index bf676c4..0000000 --- a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json b/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json deleted file mode 100644 index ad8a7c1..0000000 --- a/xmpp_android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"org.mercury_im.messenger.xmpp_android","split":""}}] \ No newline at end of file diff --git a/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml b/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml deleted file mode 100644 index bf676c4..0000000 --- a/xmpp_android/build/intermediates/library_manifest/debug/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debug/output.json b/xmpp_android/build/intermediates/merged_manifests/debug/output.json deleted file mode 100644 index 4c648d7..0000000 --- a/xmpp_android/build/intermediates/merged_manifests/debug/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug.aar","fullName":"debug","baseName":"debug"},"path":"../../library_manifest/debug/AndroidManifest.xml","properties":{"packageId":"org.mercury_im.messenger.xmpp_android","split":""}}] \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml deleted file mode 100644 index 3354089..0000000 --- a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/AndroidManifest.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json b/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json deleted file mode 100644 index 70b0afb..0000000 --- a/xmpp_android/build/intermediates/merged_manifests/debugAndroidTest/output.json +++ /dev/null @@ -1 +0,0 @@ -[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"xmpp_android-debug-androidTest.apk","fullName":"debugAndroidTest","baseName":"debug-androidTest"},"path":"AndroidManifest.xml","properties":{}}] \ No newline at end of file diff --git a/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt b/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt deleted file mode 100644 index ff328e9..0000000 --- a/xmpp_android/build/outputs/logs/manifest-merger-debug-report.txt +++ /dev/null @@ -1,37 +0,0 @@ --- Merging decision tree log --- -manifest -ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 - package - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:2:5-52 - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - android:versionName - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - android:versionCode - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:1-2:55 - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - xmlns:android - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml:1:11-69 -uses-sdk -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml reason: use-sdk injection requested -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml -INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - android:targetSdkVersion - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - android:minSdkVersion - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - ADDED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml - INJECTED from /home/vanitas/Programmierung/mercury/Messenger/xmpp_android/src/main/AndroidManifest.xml