From ac7652b5de7440b2e41320697a73e0b8f7e74377 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 16 Jul 2022 17:45:58 +0200 Subject: [PATCH 1/7] Migrate Settings and Profile controller from requery to room Signed-off-by: Andy Scherzinger --- .../talk/controllers/ProfileController.kt | 16 +++--- .../talk/controllers/SettingsController.kt | 50 ++++--------------- .../com/nextcloud/talk/users/UserManager.kt | 8 +++ 3 files changed, 25 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt index ea4a44557..52631f15f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt @@ -59,10 +59,9 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.util.viewBinding +import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ControllerProfileBinding import com.nextcloud.talk.databinding.UserInfoDetailsTableItemBinding -import com.nextcloud.talk.models.database.CapabilitiesUtil -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.userprofile.Scope import com.nextcloud.talk.models.json.userprofile.UserProfileData @@ -70,6 +69,7 @@ import com.nextcloud.talk.models.json.userprofile.UserProfileFieldsOverall import com.nextcloud.talk.models.json.userprofile.UserProfileOverall import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity import com.nextcloud.talk.ui.dialog.ScopeDialog +import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.FileUtils @@ -77,7 +77,7 @@ import com.nextcloud.talk.utils.Mimetype.IMAGE_JPG import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER -import com.nextcloud.talk.utils.database.user.UserUtils +import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers @@ -105,12 +105,12 @@ class ProfileController : NewBaseController(R.layout.controller_profile) { lateinit var ncApi: NcApi @Inject - lateinit var userUtils: UserUtils + lateinit var userManager: UserManager @Inject lateinit var permissionUtil: PlatformPermissionUtil - private var currentUser: UserEntity? = null + private var currentUser: User? = null private var edit = false private var adapter: UserInfoAdapter? = null private var userInfo: UserProfileData? = null @@ -151,7 +151,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) { item.setTitle(R.string.save) binding.emptyList.root.visibility = View.GONE binding.userinfoList.visibility = View.VISIBLE - if (CapabilitiesUtil.isAvatarEndpointAvailable(currentUser)) { + if (CapabilitiesUtilNew.isAvatarEndpointAvailable(currentUser!!)) { // TODO later avatar can also be checked via user fields, for now it is in Talk capability binding.avatarButtons.visibility = View.VISIBLE } @@ -199,7 +199,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) { adapter = UserInfoAdapter(null, activity!!.resources.getColor(R.color.colorPrimary), this) binding.userinfoList.adapter = adapter binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE) - currentUser = userUtils.currentUser + currentUser = userManager.currentUser.blockingGet() val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() } binding.avatarChoose.setOnClickListener { showBrowserScreen() } @@ -310,7 +310,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) { } // show edit button - if (CapabilitiesUtil.canEditScopes(currentUser)) { + if (CapabilitiesUtilNew.canEditScopes(currentUser!!)) { ncApi.getEditableUserProfileFields( ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token), ApiUtils.getUrlForUserFields(currentUser!!.baseUrl) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt index 185ad0b4b..14ba69c66 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -75,10 +75,9 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker import com.nextcloud.talk.jobs.ContactAddressBookWorker import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.checkPermission import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.deleteAll -import com.nextcloud.talk.models.database.CapabilitiesUtil -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.userprofile.UserProfileOverall +import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.LoggingUtils.sendMailWithAttachment @@ -89,7 +88,6 @@ import com.nextcloud.talk.utils.SecurityUtils import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ARE_CALL_SOUNDS import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew -import com.nextcloud.talk.utils.database.user.UserUtils import com.nextcloud.talk.utils.preferences.MagicUserInputModule import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import com.yarolegovich.lovelydialog.LovelySaveStateHandler @@ -115,7 +113,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { lateinit var ncApi: NcApi @Inject - lateinit var userUtils: UserUtils + lateinit var userManager: UserManager @Inject lateinit var currentUserProvider: CurrentUserProviderNew @@ -328,19 +326,8 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { finalAlias = "" } - userUtils.createOrUpdateUser( - null, - null, - null, - null, - null, - null, - null, - currentUser!!.id, - null, - finalAlias, - null - ) + currentUser!!.clientCertificate = finalAlias + userManager.updateUser(currentUser!!) }, arrayOf("RSA", "EC"), null, @@ -430,7 +417,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { } private fun removeCurrentAccount() { - val otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser!!.id!!) + val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet() val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build() WorkManager.getInstance().enqueue(accountRemovalWork) if (otherUserExists && view != null) { @@ -613,28 +600,9 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { displayName = userProfileOverall.ocs!!.data!!.displayNameAlt } if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) { - dbQueryDisposable = userUtils.createOrUpdateUser( - null, - null, - null, - displayName, - null, - null, - null, - currentUser!!.id, - null, - null, - null - ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - { userEntityResult: UserEntity -> - binding.displayNameText.text = userEntityResult.displayName - }, - { dispose(dbQueryDisposable) }, - { dispose(dbQueryDisposable) } - ) + currentUser!!.displayName = displayName + userManager.updateUser(currentUser!!) + binding.displayNameText.text = currentUser!!.displayName } }, { dispose(profileQueryDisposable) }, @@ -682,7 +650,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { appPreferences!!.isKeyboardIncognito } - if (CapabilitiesUtil.isReadStatusAvailable(userUtils.currentUser)) { + if (CapabilitiesUtilNew.isReadStatusAvailable(userManager.currentUser.blockingGet())) { (binding.settingsReadPrivacy.findViewById(R.id.mp_checkable) as Checkable).isChecked = !CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!) } else { diff --git a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt index cfd83b88b..68a1dac9d 100644 --- a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt +++ b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt @@ -123,6 +123,14 @@ class UserManager internal constructor(private val userRepository: UsersReposito }.toSingle() } + fun updateUser(user: User): Single { + return if (user.id != null) { + Single.just(userRepository.updateUser(user)) + } else { + Single.just(userRepository.insertUser(user).toInt()) + } + } + @Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods") fun createOrUpdateUser( username: String?, From 8efbd14fe025ed4391571911c7eca53bc365a022 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 16 Jul 2022 18:27:05 +0200 Subject: [PATCH 2/7] Migrate switching accounts from requery to room Signed-off-by: Andy Scherzinger --- .../talk/adapters/items/AdvancedUserItem.java | 28 ++++---- .../controllers/SwitchAccountController.kt | 70 +++++++------------ .../dialog/ChooseAccountDialogFragment.java | 66 +++++------------ .../talk/ui/dialog/SetStatusDialogFragment.kt | 2 +- .../com/nextcloud/talk/users/UserManager.kt | 4 ++ .../com/nextcloud/talk/utils/AccountUtils.kt | 9 ++- 6 files changed, 69 insertions(+), 110 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java index 7613168e0..73cf34613 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java @@ -31,8 +31,8 @@ import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.AccountItemBinding; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; @@ -51,13 +51,13 @@ public class AdvancedUserItem extends AbstractFlexibleItem { private final Participant participant; - private final UserEntity userEntity; + private final User user; @Nullable private final Account account; - public AdvancedUserItem(Participant participant, UserEntity userEntity, @Nullable Account account) { + public AdvancedUserItem(Participant participant, User user, @Nullable Account account) { this.participant = participant; - this.userEntity = userEntity; + this.user = user; this.account = account; } @@ -82,8 +82,8 @@ public class AdvancedUserItem extends AbstractFlexibleItem if (userItems.size > position) { - val userEntity = (userItems[position] as AdvancedUserItem).entity - userUtils.createOrUpdateUser( - null, - null, null, null, - null, java.lang.Boolean.TRUE, null, userEntity.id, null, null, null - ) - .subscribe(object : Observer { - override fun onSubscribe(d: Disposable) { - // unused atm - } - override fun onNext(userEntity: UserEntity) { - cookieManager.cookieStore.removeAll() - userUtils.disableAllUsersWithoutId(userEntity.id) - if (activity != null) { - activity!!.runOnUiThread { router.popCurrentController() } - } - } + val user = (userItems[position] as AdvancedUserItem).entity - override fun onError(e: Throwable) { - // unused atm - } - override fun onComplete() { - // unused atm - } - }) + if (userManager.setUserAsActive(user).blockingGet()) { + cookieManager.cookieStore.removeAll() + if (activity != null) { + activity!!.runOnUiThread { router.popCurrentController() } + } + } } true } @@ -143,23 +124,21 @@ class SwitchAccountController(args: Bundle? = null) : if (adapter == null) { adapter = FlexibleAdapter(userItems, activity, false) - var userEntity: UserEntity? var participant: Participant + if (!isAccountImport) { - for (userEntityObject in userUtils.users) { - userEntity = userEntityObject as UserEntity? - if (!userEntity!!.current) { - var userId: String? - userId = if (userEntity.userId != null) { - userEntity.userId + for (user in userManager.users.blockingGet()) { + if (!user.current) { + val userId: String? = if (user.userId != null) { + user.userId } else { - userEntity.username + user.username } participant = Participant() participant.actorType = Participant.ActorType.USERS participant.actorId = userId - participant.displayName = userEntity.displayName - userItems.add(AdvancedUserItem(participant, userEntity, null)) + participant.displayName = user.displayName + userItems.add(AdvancedUserItem(participant, user, null)) } } adapter!!.addListener(onSwitchItemClickListener) @@ -167,16 +146,17 @@ class SwitchAccountController(args: Bundle? = null) : } else { var account: Account var importAccount: ImportAccount - for (accountObject in findAccounts(userUtils.users as List)) { + var user: User + for (accountObject in findAccountsForUsers(userManager.users.blockingGet())) { account = accountObject importAccount = getInformationFromAccount(account) participant = Participant() participant.actorType = Participant.ActorType.USERS participant.actorId = importAccount.getUsername() participant.displayName = importAccount.getUsername() - userEntity = UserEntity() - userEntity.baseUrl = importAccount.getBaseUrl() - userItems.add(AdvancedUserItem(participant, userEntity, account)) + user = User() + user.baseUrl = importAccount.getBaseUrl() + userItems.add(AdvancedUserItem(participant, user, account)) } adapter!!.addListener(onImportItemClickListener) adapter!!.updateDataSet(userItems, false) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java index 3ae40b40c..c56689640 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java @@ -44,17 +44,16 @@ import com.nextcloud.talk.activities.MainActivity; import com.nextcloud.talk.adapters.items.AdvancedUserItem; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.DialogChooseAccountBinding; -import com.nextcloud.talk.models.database.CapabilitiesUtil; -import com.nextcloud.talk.models.database.User; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.models.json.status.Status; import com.nextcloud.talk.models.json.status.StatusOverall; import com.nextcloud.talk.ui.StatusDrawable; +import com.nextcloud.talk.users.UserManager; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; -import com.nextcloud.talk.utils.database.user.UserUtils; +import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew; import java.net.CookieManager; import java.util.ArrayList; @@ -80,7 +79,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { private static final float STATUS_SIZE_IN_DP = 9f; @Inject - UserUtils userUtils; + UserManager userManager; @Inject CookieManager cookieManager; @@ -115,7 +114,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { binding.currentAccount.userIcon.setTag(""); // Defining user texts, accounts, etc. - User user = userUtils.getCurrentUser(); + User user = userManager.getCurrentUser().blockingGet(); if (user != null) { binding.currentAccount.userName.setText(user.getDisplayName()); binding.currentAccount.ticker.setVisibility(View.GONE); @@ -171,11 +170,11 @@ public class ChooseAccountDialogFragment extends DialogFragment { if (adapter == null) { adapter = new FlexibleAdapter<>(userItems, getActivity(), false); - UserEntity userEntity; + User userEntity; Participant participant; - for (Object userEntityObject : userUtils.getUsers()) { - userEntity = (UserEntity) userEntityObject; + for (Object userItem : userManager.getUsers().blockingGet()) { + userEntity = (User) userItem; if (!userEntity.getCurrent()) { String userId; if (userEntity.getUserId() != null) { @@ -202,7 +201,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { private void loadCurrentStatus(User user) { String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken()); - if (CapabilitiesUtil.isUserStatusAvailable(userUtils.getCurrentUser())) { + if (CapabilitiesUtilNew.isUserStatusAvailable(userManager.getCurrentUser().blockingGet())) { binding.statusView.setVisibility(View.VISIBLE); ncApi.status(credentials, ApiUtils.getUrlForStatus(user.getBaseUrl())). @@ -276,45 +275,16 @@ public class ChooseAccountDialogFragment extends DialogFragment { @Override public boolean onItemClick(View view, int position) { if (userItems.size() > position) { - UserEntity userEntity = (userItems.get(position)).getEntity(); - userUtils.createOrUpdateUser(null, - null, - null, - null, - null, - Boolean.TRUE, - null, - userEntity.getId(), - null, - null, - null) - .subscribe(new Observer() { - @Override - public void onSubscribe(@NonNull Disposable d) { - // unused atm - } + User user = (userItems.get(position)).getEntity(); - @Override - public void onNext(@NonNull UserEntity userEntity) { - cookieManager.getCookieStore().removeAll(); - userUtils.disableAllUsersWithoutId(userEntity.getId()); - if (getActivity() != null) { - getActivity().runOnUiThread( - () -> ((MainActivity) getActivity()).resetConversationsList()); - } - dismiss(); - } - - @Override - public void onError(@NonNull Throwable e) { - Log.w(TAG, "Error updating user", e); - } - - @Override - public void onComplete() { - // unused atm - } - }); + if (userManager.setUserAsActive(user).blockingGet()) { + cookieManager.getCookieStore().removeAll(); + if (getActivity() != null) { + getActivity().runOnUiThread( + () -> ((MainActivity) getActivity()).resetConversationsList()); + } + dismiss(); + } } return true; diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 3e37d6c6f..e0d8630f9 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -45,8 +45,8 @@ import com.nextcloud.talk.adapters.PredefinedStatusClickListener import com.nextcloud.talk.adapters.PredefinedStatusListAdapter import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication +import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.DialogSetStatusBinding -import com.nextcloud.talk.models.database.User import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.status.ClearAt import com.nextcloud.talk.models.json.status.Status diff --git a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt index 68a1dac9d..9f7890458 100644 --- a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt +++ b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt @@ -131,6 +131,10 @@ class UserManager internal constructor(private val userRepository: UsersReposito } } + fun setUserAsActive(user: User): Single { + return userRepository.setUserAsActiveWithId(user.id!!) + } + @Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods") fun createOrUpdateUser( username: String?, diff --git a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt index fbc05cbdc..31a7e9e09 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt @@ -30,9 +30,9 @@ import android.content.pm.PackageManager import android.util.Log import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication +import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.models.ImportAccount import com.nextcloud.talk.models.database.UserEntity -import java.util.ArrayList import java.util.Arrays object AccountUtils { @@ -40,14 +40,19 @@ object AccountUtils { private const val TAG = "AccountUtils" private const val MIN_SUPPORTED_FILES_APP_VERSION = 30060151 + @Deprecated("Migrate to findAccountsForUsers") fun findAccounts(userEntitiesList: List): List { + return findAccountsForUsers(LegacyUserEntityMapper.toModel(userEntitiesList)) + } + + fun findAccountsForUsers(userEntitiesList: List): List { val context = NextcloudTalkApplication.sharedApplication!!.applicationContext val accMgr = AccountManager.get(context) val accounts = accMgr.getAccountsByType(context.getString(R.string.nc_import_account_type)) val accountsAvailable = ArrayList() var importAccount: ImportAccount - var internalUserEntity: UserEntity + var internalUserEntity: User var accountFound: Boolean for (account in accounts) { accountFound = false From 8385def3ed26594e84c2c866af1cc79f5acaf24d Mon Sep 17 00:00:00 2001 From: drone Date: Sun, 17 Jul 2022 13:43:57 +0000 Subject: [PATCH 3/7] Drone: update FindBugs results to reflect reduced error/warning count [skip ci] Signed-off-by: drone --- scripts/analysis/findbugs-results.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/analysis/findbugs-results.txt b/scripts/analysis/findbugs-results.txt index c663e4d09..d7019ae2e 100644 --- a/scripts/analysis/findbugs-results.txt +++ b/scripts/analysis/findbugs-results.txt @@ -1 +1 @@ -151 \ No newline at end of file +149 \ No newline at end of file From 7568ccdbb1cd42680752df7afa9a8a4f71bc7a2d Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sun, 17 Jul 2022 16:23:34 +0200 Subject: [PATCH 4/7] split account matcher code for better readability Signed-off-by: Andy Scherzinger --- .../com/nextcloud/talk/utils/AccountUtils.kt | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt index 31a7e9e09..3cc5fde3f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt @@ -45,42 +45,18 @@ object AccountUtils { return findAccountsForUsers(LegacyUserEntityMapper.toModel(userEntitiesList)) } - fun findAccountsForUsers(userEntitiesList: List): List { + fun findAccountsForUsers(users: List): List { val context = NextcloudTalkApplication.sharedApplication!!.applicationContext val accMgr = AccountManager.get(context) val accounts = accMgr.getAccountsByType(context.getString(R.string.nc_import_account_type)) val accountsAvailable = ArrayList() - var importAccount: ImportAccount - var internalUserEntity: User var accountFound: Boolean for (account in accounts) { accountFound = false - for (i in userEntitiesList.indices) { - internalUserEntity = userEntitiesList[i] - importAccount = getInformationFromAccount(account) - if (importAccount.token != null) { - if (UriUtils.hasHttpProtocollPrefixed(importAccount.baseUrl)) { - if ( - internalUserEntity.username == importAccount.username && - internalUserEntity.baseUrl == importAccount.baseUrl - ) { - accountFound = true - break - } - } else { - if (internalUserEntity.username == importAccount.username && - ( - internalUserEntity.baseUrl == "http://" + importAccount.baseUrl || - internalUserEntity.baseUrl == "https://" + importAccount.baseUrl - ) - ) { - accountFound = true - break - } - } - } else { + for (user in users) { + if (matchAccounts(getInformationFromAccount(account), user)) { accountFound = true break } @@ -94,6 +70,33 @@ object AccountUtils { return accountsAvailable } + private fun matchAccounts(importAccount: ImportAccount, user: User): Boolean { + var accountFound = false + if (importAccount.token != null) { + if (UriUtils.hasHttpProtocollPrefixed(importAccount.baseUrl)) { + if ( + user.username == importAccount.username && + user.baseUrl == importAccount.baseUrl + ) { + accountFound = true + } + } else { + if (user.username == importAccount.username && + ( + user.baseUrl == "http://" + importAccount.baseUrl || + user.baseUrl == "https://" + importAccount.baseUrl + ) + ) { + accountFound = true + } + } + } else { + accountFound = true + } + + return accountFound + } + fun getAppNameBasedOnPackage(packageName: String): String { val context = NextcloudTalkApplication.sharedApplication!!.applicationContext val packageManager = context.packageManager From 480122d6486cb9f29e93ade2b37c14c3d0a7a0ca Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 18 Jul 2022 18:48:27 +0200 Subject: [PATCH 5/7] rename entity to user Signed-off-by: Andy Scherzinger --- .../com/nextcloud/talk/adapters/items/AdvancedUserItem.java | 2 +- .../com/nextcloud/talk/controllers/SwitchAccountController.kt | 2 +- .../nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java index 73cf34613..a7b49be04 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java @@ -82,7 +82,7 @@ public class AdvancedUserItem extends AbstractFlexibleItem if (userItems.size > position) { - val user = (userItems[position] as AdvancedUserItem).entity + val user = (userItems[position] as AdvancedUserItem).user if (userManager.setUserAsActive(user).blockingGet()) { cookieManager.cookieStore.removeAll() diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java index c56689640..c78db0e4c 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java @@ -275,7 +275,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { @Override public boolean onItemClick(View view, int position) { if (userItems.size() > position) { - User user = (userItems.get(position)).getEntity(); + User user = (userItems.get(position)).getUser(); if (userManager.setUserAsActive(user).blockingGet()) { cookieManager.getCookieStore().removeAll(); From 96910c02a11641159fd59714e89e3b06bb031adf Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 18 Jul 2022 18:50:00 +0200 Subject: [PATCH 6/7] simplify call logic Signed-off-by: Andy Scherzinger --- .../main/java/com/nextcloud/talk/users/UserManager.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt index 9f7890458..4dc1b1881 100644 --- a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt +++ b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt @@ -124,10 +124,11 @@ class UserManager internal constructor(private val userRepository: UsersReposito } fun updateUser(user: User): Single { - return if (user.id != null) { - Single.just(userRepository.updateUser(user)) - } else { - Single.just(userRepository.insertUser(user).toInt()) + return Single.fromCallable { + when (user.id) { + null -> userRepository.insertUser(user).toInt() + else -> userRepository.updateUser(user) + } } } From 7ce5746969058a5d1afadaf7e7c7d508722295fe Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Mon, 18 Jul 2022 18:51:40 +0200 Subject: [PATCH 7/7] rename updateUser to updateOrCreateUser Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/talk/controllers/SettingsController.kt | 4 ++-- app/src/main/java/com/nextcloud/talk/users/UserManager.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt index 14ba69c66..98f7c5364 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -327,7 +327,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { } currentUser!!.clientCertificate = finalAlias - userManager.updateUser(currentUser!!) + userManager.updateOrCreateUser(currentUser!!) }, arrayOf("RSA", "EC"), null, @@ -601,7 +601,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) { } if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) { currentUser!!.displayName = displayName - userManager.updateUser(currentUser!!) + userManager.updateOrCreateUser(currentUser!!) binding.displayNameText.text = currentUser!!.displayName } }, diff --git a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt index 4dc1b1881..2262da0ac 100644 --- a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt +++ b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt @@ -123,7 +123,7 @@ class UserManager internal constructor(private val userRepository: UsersReposito }.toSingle() } - fun updateUser(user: User): Single { + fun updateOrCreateUser(user: User): Single { return Single.fromCallable { when (user.id) { null -> userRepository.insertUser(user).toInt()