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