Merge pull request #2222 from nextcloud/chore/1549/roomMigration4

Migrate further areas to room
This commit is contained in:
Andy Scherzinger 2022-07-18 19:29:35 +02:00 committed by GitHub
commit fd727322ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 124 additions and 185 deletions

View File

@ -31,8 +31,8 @@ import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.interfaces.DraweeController;
import com.nextcloud.talk.R; import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.databinding.AccountItemBinding; 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.models.json.participants.Participant;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.DisplayUtils;
@ -51,13 +51,13 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
IFilterable<String> { IFilterable<String> {
private final Participant participant; private final Participant participant;
private final UserEntity userEntity; private final User user;
@Nullable @Nullable
private final Account account; 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.participant = participant;
this.userEntity = userEntity; this.user = user;
this.account = account; this.account = account;
} }
@ -82,8 +82,8 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
return participant; return participant;
} }
public UserEntity getEntity() { public User getUser() {
return userEntity; return user;
} }
@Nullable @Nullable
@ -117,21 +117,21 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
holder.binding.userName.setText(participant.getDisplayName()); holder.binding.userName.setText(participant.getDisplayName());
} }
if (userEntity != null && !TextUtils.isEmpty(userEntity.getBaseUrl())) { if (user != null && !TextUtils.isEmpty(user.getBaseUrl())) {
String host = Uri.parse(userEntity.getBaseUrl()).getHost(); String host = Uri.parse(user.getBaseUrl()).getHost();
if (!TextUtils.isEmpty(host)) { if (!TextUtils.isEmpty(host)) {
holder.binding.account.setText(Uri.parse(userEntity.getBaseUrl()).getHost()); holder.binding.account.setText(Uri.parse(user.getBaseUrl()).getHost());
} else { } else {
holder.binding.account.setText(userEntity.getBaseUrl()); holder.binding.account.setText(user.getBaseUrl());
} }
} }
holder.binding.userIcon.getHierarchy().setPlaceholderImage(R.drawable.account_circle_48dp); holder.binding.userIcon.getHierarchy().setPlaceholderImage(R.drawable.account_circle_48dp);
holder.binding.userIcon.getHierarchy().setFailureImage(R.drawable.account_circle_48dp); holder.binding.userIcon.getHierarchy().setFailureImage(R.drawable.account_circle_48dp);
if (userEntity != null && userEntity.getBaseUrl() != null && if (user != null && user.getBaseUrl() != null &&
userEntity.getBaseUrl().startsWith("http://") || user.getBaseUrl().startsWith("http://") ||
userEntity.getBaseUrl().startsWith("https://")) { user.getBaseUrl().startsWith("https://")) {
DraweeController draweeController = Fresco.newDraweeControllerBuilder() DraweeController draweeController = Fresco.newDraweeControllerBuilder()
.setOldController(holder.binding.userIcon.getController()) .setOldController(holder.binding.userIcon.getController())
@ -139,7 +139,7 @@ public class AdvancedUserItem extends AbstractFlexibleItem<AdvancedUserItem.User
.setImageRequest( .setImageRequest(
DisplayUtils.getImageRequestForUrl( DisplayUtils.getImageRequestForUrl(
ApiUtils.getUrlForAvatar( ApiUtils.getUrlForAvatar(
userEntity.getBaseUrl(), user.getBaseUrl(),
participant.getCalculatedActorId(), participant.getCalculatedActorId(),
true))) true)))
.build(); .build();

View File

@ -59,10 +59,9 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.util.viewBinding 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.ControllerProfileBinding
import com.nextcloud.talk.databinding.UserInfoDetailsTableItemBinding 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.generic.GenericOverall
import com.nextcloud.talk.models.json.userprofile.Scope import com.nextcloud.talk.models.json.userprofile.Scope
import com.nextcloud.talk.models.json.userprofile.UserProfileData 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.models.json.userprofile.UserProfileOverall
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
import com.nextcloud.talk.ui.dialog.ScopeDialog import com.nextcloud.talk.ui.dialog.ScopeDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.FileUtils 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
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC 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.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 com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -105,12 +105,12 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var permissionUtil: PlatformPermissionUtil lateinit var permissionUtil: PlatformPermissionUtil
private var currentUser: UserEntity? = null private var currentUser: User? = null
private var edit = false private var edit = false
private var adapter: UserInfoAdapter? = null private var adapter: UserInfoAdapter? = null
private var userInfo: UserProfileData? = null private var userInfo: UserProfileData? = null
@ -151,7 +151,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
item.setTitle(R.string.save) item.setTitle(R.string.save)
binding.emptyList.root.visibility = View.GONE binding.emptyList.root.visibility = View.GONE
binding.userinfoList.visibility = View.VISIBLE 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 // TODO later avatar can also be checked via user fields, for now it is in Talk capability
binding.avatarButtons.visibility = View.VISIBLE 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) adapter = UserInfoAdapter(null, activity!!.resources.getColor(R.color.colorPrimary), this)
binding.userinfoList.adapter = adapter binding.userinfoList.adapter = adapter
binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE) binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE)
currentUser = userUtils.currentUser currentUser = userManager.currentUser.blockingGet()
val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() } binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() }
binding.avatarChoose.setOnClickListener { showBrowserScreen() } binding.avatarChoose.setOnClickListener { showBrowserScreen() }
@ -310,7 +310,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
} }
// show edit button // show edit button
if (CapabilitiesUtil.canEditScopes(currentUser)) { if (CapabilitiesUtilNew.canEditScopes(currentUser!!)) {
ncApi.getEditableUserProfileFields( ncApi.getEditableUserProfileFields(
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token), ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
ApiUtils.getUrlForUserFields(currentUser!!.baseUrl) ApiUtils.getUrlForUserFields(currentUser!!.baseUrl)

View File

@ -75,10 +75,9 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker
import com.nextcloud.talk.jobs.ContactAddressBookWorker import com.nextcloud.talk.jobs.ContactAddressBookWorker
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.checkPermission import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.checkPermission
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.deleteAll 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.generic.GenericOverall
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall 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.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.LoggingUtils.sendMailWithAttachment 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.bundle.BundleKeys.KEY_ARE_CALL_SOUNDS
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew 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.preferences.MagicUserInputModule
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
import com.yarolegovich.lovelydialog.LovelySaveStateHandler import com.yarolegovich.lovelydialog.LovelySaveStateHandler
@ -115,7 +113,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var currentUserProvider: CurrentUserProviderNew lateinit var currentUserProvider: CurrentUserProviderNew
@ -328,19 +326,8 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
finalAlias = "" finalAlias = ""
} }
userUtils.createOrUpdateUser( currentUser!!.clientCertificate = finalAlias
null, userManager.updateOrCreateUser(currentUser!!)
null,
null,
null,
null,
null,
null,
currentUser!!.id,
null,
finalAlias,
null
)
}, },
arrayOf("RSA", "EC"), arrayOf("RSA", "EC"),
null, null,
@ -430,7 +417,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
} }
private fun removeCurrentAccount() { private fun removeCurrentAccount() {
val otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser!!.id!!) val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet()
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build() val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
WorkManager.getInstance().enqueue(accountRemovalWork) WorkManager.getInstance().enqueue(accountRemovalWork)
if (otherUserExists && view != null) { if (otherUserExists && view != null) {
@ -613,28 +600,9 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
displayName = userProfileOverall.ocs!!.data!!.displayNameAlt displayName = userProfileOverall.ocs!!.data!!.displayNameAlt
} }
if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) { if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) {
dbQueryDisposable = userUtils.createOrUpdateUser( currentUser!!.displayName = displayName
null, userManager.updateOrCreateUser(currentUser!!)
null, binding.displayNameText.text = currentUser!!.displayName
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) }
)
} }
}, },
{ dispose(profileQueryDisposable) }, { dispose(profileQueryDisposable) },
@ -682,7 +650,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
appPreferences!!.isKeyboardIncognito appPreferences!!.isKeyboardIncognito
} }
if (CapabilitiesUtil.isReadStatusAvailable(userUtils.currentUser)) { if (CapabilitiesUtilNew.isReadStatusAvailable(userManager.currentUser.blockingGet())) {
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked = (binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked =
!CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!) !CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
} else { } else {

View File

@ -39,25 +39,22 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.util.viewBinding import com.nextcloud.talk.controllers.util.viewBinding
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ControllerGenericRvBinding import com.nextcloud.talk.databinding.ControllerGenericRvBinding
import com.nextcloud.talk.models.ImportAccount import com.nextcloud.talk.models.ImportAccount
import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.utils.AccountUtils.findAccounts import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.AccountUtils.findAccountsForUsers
import com.nextcloud.talk.utils.AccountUtils.getInformationFromAccount import com.nextcloud.talk.utils.AccountUtils.getInformationFromAccount
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_BASE_URL import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_BASE_URL
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USERNAME import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USERNAME
import com.nextcloud.talk.utils.database.user.UserUtils
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.reactivex.Observer
import io.reactivex.disposables.Disposable
import org.osmdroid.config.Configuration import org.osmdroid.config.Configuration
import java.net.CookieManager import java.net.CookieManager
import java.util.ArrayList
import javax.inject.Inject import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
@ -69,7 +66,7 @@ class SwitchAccountController(args: Bundle? = null) :
private val binding: ControllerGenericRvBinding by viewBinding(ControllerGenericRvBinding::bind) private val binding: ControllerGenericRvBinding by viewBinding(ControllerGenericRvBinding::bind)
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var cookieManager: CookieManager lateinit var cookieManager: CookieManager
@ -85,33 +82,17 @@ class SwitchAccountController(args: Bundle? = null) :
} }
true true
} }
private val onSwitchItemClickListener = FlexibleAdapter.OnItemClickListener { _, position -> private val onSwitchItemClickListener = FlexibleAdapter.OnItemClickListener { _, position ->
if (userItems.size > position) { if (userItems.size > position) {
val userEntity = (userItems[position] as AdvancedUserItem).entity val user = (userItems[position] as AdvancedUserItem).user
userUtils.createOrUpdateUser(
null, if (userManager.setUserAsActive(user).blockingGet()) {
null, null, null,
null, java.lang.Boolean.TRUE, null, userEntity.id, null, null, null
)
.subscribe(object : Observer<UserEntity> {
override fun onSubscribe(d: Disposable) {
// unused atm
}
override fun onNext(userEntity: UserEntity) {
cookieManager.cookieStore.removeAll() cookieManager.cookieStore.removeAll()
userUtils.disableAllUsersWithoutId(userEntity.id)
if (activity != null) { if (activity != null) {
activity!!.runOnUiThread { router.popCurrentController() } activity!!.runOnUiThread { router.popCurrentController() }
} }
} }
override fun onError(e: Throwable) {
// unused atm
}
override fun onComplete() {
// unused atm
}
})
} }
true true
} }
@ -143,23 +124,21 @@ class SwitchAccountController(args: Bundle? = null) :
if (adapter == null) { if (adapter == null) {
adapter = FlexibleAdapter(userItems, activity, false) adapter = FlexibleAdapter(userItems, activity, false)
var userEntity: UserEntity?
var participant: Participant var participant: Participant
if (!isAccountImport) { if (!isAccountImport) {
for (userEntityObject in userUtils.users) { for (user in userManager.users.blockingGet()) {
userEntity = userEntityObject as UserEntity? if (!user.current) {
if (!userEntity!!.current) { val userId: String? = if (user.userId != null) {
var userId: String? user.userId
userId = if (userEntity.userId != null) {
userEntity.userId
} else { } else {
userEntity.username user.username
} }
participant = Participant() participant = Participant()
participant.actorType = Participant.ActorType.USERS participant.actorType = Participant.ActorType.USERS
participant.actorId = userId participant.actorId = userId
participant.displayName = userEntity.displayName participant.displayName = user.displayName
userItems.add(AdvancedUserItem(participant, userEntity, null)) userItems.add(AdvancedUserItem(participant, user, null))
} }
} }
adapter!!.addListener(onSwitchItemClickListener) adapter!!.addListener(onSwitchItemClickListener)
@ -167,16 +146,17 @@ class SwitchAccountController(args: Bundle? = null) :
} else { } else {
var account: Account var account: Account
var importAccount: ImportAccount var importAccount: ImportAccount
for (accountObject in findAccounts(userUtils.users as List<UserEntity>)) { var user: User
for (accountObject in findAccountsForUsers(userManager.users.blockingGet())) {
account = accountObject account = accountObject
importAccount = getInformationFromAccount(account) importAccount = getInformationFromAccount(account)
participant = Participant() participant = Participant()
participant.actorType = Participant.ActorType.USERS participant.actorType = Participant.ActorType.USERS
participant.actorId = importAccount.getUsername() participant.actorId = importAccount.getUsername()
participant.displayName = importAccount.getUsername() participant.displayName = importAccount.getUsername()
userEntity = UserEntity() user = User()
userEntity.baseUrl = importAccount.getBaseUrl() user.baseUrl = importAccount.getBaseUrl()
userItems.add(AdvancedUserItem(participant, userEntity, account)) userItems.add(AdvancedUserItem(participant, user, account))
} }
adapter!!.addListener(onImportItemClickListener) adapter!!.addListener(onImportItemClickListener)
adapter!!.updateDataSet(userItems, false) adapter!!.updateDataSet(userItems, false)

View File

@ -44,17 +44,16 @@ import com.nextcloud.talk.activities.MainActivity;
import com.nextcloud.talk.adapters.items.AdvancedUserItem; import com.nextcloud.talk.adapters.items.AdvancedUserItem;
import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.databinding.DialogChooseAccountBinding; 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.participants.Participant;
import com.nextcloud.talk.models.json.status.Status; import com.nextcloud.talk.models.json.status.Status;
import com.nextcloud.talk.models.json.status.StatusOverall; import com.nextcloud.talk.models.json.status.StatusOverall;
import com.nextcloud.talk.ui.StatusDrawable; import com.nextcloud.talk.ui.StatusDrawable;
import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils; 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.net.CookieManager;
import java.util.ArrayList; import java.util.ArrayList;
@ -80,7 +79,7 @@ public class ChooseAccountDialogFragment extends DialogFragment {
private static final float STATUS_SIZE_IN_DP = 9f; private static final float STATUS_SIZE_IN_DP = 9f;
@Inject @Inject
UserUtils userUtils; UserManager userManager;
@Inject @Inject
CookieManager cookieManager; CookieManager cookieManager;
@ -115,7 +114,7 @@ public class ChooseAccountDialogFragment extends DialogFragment {
binding.currentAccount.userIcon.setTag(""); binding.currentAccount.userIcon.setTag("");
// Defining user texts, accounts, etc. // Defining user texts, accounts, etc.
User user = userUtils.getCurrentUser(); User user = userManager.getCurrentUser().blockingGet();
if (user != null) { if (user != null) {
binding.currentAccount.userName.setText(user.getDisplayName()); binding.currentAccount.userName.setText(user.getDisplayName());
binding.currentAccount.ticker.setVisibility(View.GONE); binding.currentAccount.ticker.setVisibility(View.GONE);
@ -171,11 +170,11 @@ public class ChooseAccountDialogFragment extends DialogFragment {
if (adapter == null) { if (adapter == null) {
adapter = new FlexibleAdapter<>(userItems, getActivity(), false); adapter = new FlexibleAdapter<>(userItems, getActivity(), false);
UserEntity userEntity; User userEntity;
Participant participant; Participant participant;
for (Object userEntityObject : userUtils.getUsers()) { for (Object userItem : userManager.getUsers().blockingGet()) {
userEntity = (UserEntity) userEntityObject; userEntity = (User) userItem;
if (!userEntity.getCurrent()) { if (!userEntity.getCurrent()) {
String userId; String userId;
if (userEntity.getUserId() != null) { if (userEntity.getUserId() != null) {
@ -202,7 +201,7 @@ public class ChooseAccountDialogFragment extends DialogFragment {
private void loadCurrentStatus(User user) { private void loadCurrentStatus(User user) {
String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken()); String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken());
if (CapabilitiesUtil.isUserStatusAvailable(userUtils.getCurrentUser())) { if (CapabilitiesUtilNew.isUserStatusAvailable(userManager.getCurrentUser().blockingGet())) {
binding.statusView.setVisibility(View.VISIBLE); binding.statusView.setVisibility(View.VISIBLE);
ncApi.status(credentials, ApiUtils.getUrlForStatus(user.getBaseUrl())). ncApi.status(credentials, ApiUtils.getUrlForStatus(user.getBaseUrl())).
@ -276,45 +275,16 @@ public class ChooseAccountDialogFragment extends DialogFragment {
@Override @Override
public boolean onItemClick(View view, int position) { public boolean onItemClick(View view, int position) {
if (userItems.size() > position) { if (userItems.size() > position) {
UserEntity userEntity = (userItems.get(position)).getEntity(); User user = (userItems.get(position)).getUser();
userUtils.createOrUpdateUser(null,
null,
null,
null,
null,
Boolean.TRUE,
null,
userEntity.getId(),
null,
null,
null)
.subscribe(new Observer<UserEntity>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
// unused atm
}
@Override if (userManager.setUserAsActive(user).blockingGet()) {
public void onNext(@NonNull UserEntity userEntity) {
cookieManager.getCookieStore().removeAll(); cookieManager.getCookieStore().removeAll();
userUtils.disableAllUsersWithoutId(userEntity.getId());
if (getActivity() != null) { if (getActivity() != null) {
getActivity().runOnUiThread( getActivity().runOnUiThread(
() -> ((MainActivity) getActivity()).resetConversationsList()); () -> ((MainActivity) getActivity()).resetConversationsList());
} }
dismiss(); dismiss();
} }
@Override
public void onError(@NonNull Throwable e) {
Log.w(TAG, "Error updating user", e);
}
@Override
public void onComplete() {
// unused atm
}
});
} }
return true; return true;

View File

@ -45,8 +45,8 @@ import com.nextcloud.talk.adapters.PredefinedStatusClickListener
import com.nextcloud.talk.adapters.PredefinedStatusListAdapter import com.nextcloud.talk.adapters.PredefinedStatusListAdapter
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.DialogSetStatusBinding 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.generic.GenericOverall
import com.nextcloud.talk.models.json.status.ClearAt import com.nextcloud.talk.models.json.status.ClearAt
import com.nextcloud.talk.models.json.status.Status import com.nextcloud.talk.models.json.status.Status

View File

@ -123,6 +123,19 @@ class UserManager internal constructor(private val userRepository: UsersReposito
}.toSingle() }.toSingle()
} }
fun updateOrCreateUser(user: User): Single<Int> {
return Single.fromCallable {
when (user.id) {
null -> userRepository.insertUser(user).toInt()
else -> userRepository.updateUser(user)
}
}
}
fun setUserAsActive(user: User): Single<Boolean> {
return userRepository.setUserAsActiveWithId(user.id!!)
}
@Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods") @Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods")
fun createOrUpdateUser( fun createOrUpdateUser(
username: String?, username: String?,

View File

@ -30,9 +30,9 @@ import android.content.pm.PackageManager
import android.util.Log import android.util.Log
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication 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.ImportAccount
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.database.UserEntity
import java.util.ArrayList
import java.util.Arrays import java.util.Arrays
object AccountUtils { object AccountUtils {
@ -40,42 +40,23 @@ object AccountUtils {
private const val TAG = "AccountUtils" private const val TAG = "AccountUtils"
private const val MIN_SUPPORTED_FILES_APP_VERSION = 30060151 private const val MIN_SUPPORTED_FILES_APP_VERSION = 30060151
@Deprecated("Migrate to findAccountsForUsers")
fun findAccounts(userEntitiesList: List<UserEntity>): List<Account> { fun findAccounts(userEntitiesList: List<UserEntity>): List<Account> {
return findAccountsForUsers(LegacyUserEntityMapper.toModel(userEntitiesList))
}
fun findAccountsForUsers(users: List<User>): List<Account> {
val context = NextcloudTalkApplication.sharedApplication!!.applicationContext val context = NextcloudTalkApplication.sharedApplication!!.applicationContext
val accMgr = AccountManager.get(context) val accMgr = AccountManager.get(context)
val accounts = accMgr.getAccountsByType(context.getString(R.string.nc_import_account_type)) val accounts = accMgr.getAccountsByType(context.getString(R.string.nc_import_account_type))
val accountsAvailable = ArrayList<Account>() val accountsAvailable = ArrayList<Account>()
var importAccount: ImportAccount
var internalUserEntity: UserEntity
var accountFound: Boolean var accountFound: Boolean
for (account in accounts) { for (account in accounts) {
accountFound = false accountFound = false
for (i in userEntitiesList.indices) { for (user in users) {
internalUserEntity = userEntitiesList[i] if (matchAccounts(getInformationFromAccount(account), user)) {
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 {
accountFound = true accountFound = true
break break
} }
@ -89,6 +70,33 @@ object AccountUtils {
return accountsAvailable 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 { fun getAppNameBasedOnPackage(packageName: String): String {
val context = NextcloudTalkApplication.sharedApplication!!.applicationContext val context = NextcloudTalkApplication.sharedApplication!!.applicationContext
val packageManager = context.packageManager val packageManager = context.packageManager

View File

@ -1 +1 @@
151 149