mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Further fixes to settings
This commit is contained in:
parent
c7989f04ce
commit
c3a9cca12d
@ -61,6 +61,10 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker
|
||||
import com.nextcloud.talk.models.RingtoneSettings
|
||||
import com.nextcloud.talk.models.database.UserEntity
|
||||
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||
import com.nextcloud.talk.newarch.local.models.other.UserStatus
|
||||
import com.nextcloud.talk.newarch.utils.getCredentials
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
@ -83,6 +87,7 @@ import com.yarolegovich.mp.MaterialStandardPreference
|
||||
import com.yarolegovich.mp.MaterialSwitchPreference
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import kotlinx.coroutines.*
|
||||
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
|
||||
import org.koin.android.ext.android.inject
|
||||
import java.io.IOException
|
||||
@ -175,9 +180,9 @@ class SettingsController : BaseController() {
|
||||
@JvmField
|
||||
@Inject
|
||||
var ncApi: NcApi? = null
|
||||
val userUtils: UserUtils by inject()
|
||||
val usersRepository: UsersRepository by inject()
|
||||
private var saveStateHandler: LovelySaveStateHandler? = null
|
||||
private var currentUser: UserEntity? = null
|
||||
private var currentUser: UserNgEntity? = null
|
||||
private var credentials: String? = null
|
||||
lateinit var proxyTypeChangeListener: OnPreferenceValueChangedListener<String>
|
||||
lateinit var proxyCredentialsChangeListener: OnPreferenceValueChangedListener<Boolean>
|
||||
@ -193,11 +198,6 @@ class SettingsController : BaseController() {
|
||||
return inflater.inflate(R.layout.controller_settings, container, false)
|
||||
}
|
||||
|
||||
private fun getCurrentUser() {
|
||||
currentUser = userUtils.currentUser
|
||||
credentials = currentUser!!.getCredentials()
|
||||
}
|
||||
|
||||
override fun onViewBound(view: View) {
|
||||
super.onViewBound(view)
|
||||
setHasOptionsMenu(true)
|
||||
@ -207,8 +207,6 @@ class SettingsController : BaseController() {
|
||||
.componentApplication
|
||||
.inject(this)
|
||||
|
||||
getCurrentUser()
|
||||
|
||||
if (saveStateHandler == null) {
|
||||
saveStateHandler = LovelySaveStateHandler()
|
||||
}
|
||||
@ -219,6 +217,114 @@ class SettingsController : BaseController() {
|
||||
screenLockChangeListener = ScreenLockListener()
|
||||
screenLockTimeoutChangeListener = ScreenLockTimeoutListener()
|
||||
themeChangeListener = ThemeChangeListener()
|
||||
}
|
||||
|
||||
private fun showLovelyDialog(
|
||||
dialogId: Int,
|
||||
savedInstanceState: Bundle?
|
||||
) {
|
||||
when (dialogId) {
|
||||
ID_REMOVE_ACCOUNT_WARNING_DIALOG -> showRemoveAccountWarning(savedInstanceState)
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick(R.id.settings_version)
|
||||
fun sendLogs() {
|
||||
if (resources!!.getBoolean(R.bool.nc_is_debug)) {
|
||||
LoggingUtils.sendMailWithAttachment(context!!)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSaveViewState(
|
||||
view: View,
|
||||
outState: Bundle
|
||||
) {
|
||||
saveStateHandler!!.saveInstanceState(outState)
|
||||
super.onSaveViewState(view, outState)
|
||||
}
|
||||
|
||||
override fun onRestoreViewState(
|
||||
view: View,
|
||||
savedViewState: Bundle
|
||||
) {
|
||||
super.onRestoreViewState(view, savedViewState)
|
||||
if (LovelySaveStateHandler.wasDialogOnScreen(savedViewState)) {
|
||||
//Dialog won't be restarted automatically, so we need to call this method.
|
||||
//Each dialog knows how to restore its viewState
|
||||
showLovelyDialog(LovelySaveStateHandler.getSavedDialogId(savedViewState), savedViewState)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showRemoveAccountWarning(savedInstanceState: Bundle?) {
|
||||
if (activity != null) {
|
||||
LovelyStandardDialog(activity, LovelyStandardDialog.ButtonLayout.HORIZONTAL)
|
||||
.setTopColorRes(R.color.nc_darkRed)
|
||||
.setIcon(
|
||||
DisplayUtils.getTintedDrawable(
|
||||
resources!!,
|
||||
R.drawable.ic_delete_black_24dp, R.color.bg_default
|
||||
)
|
||||
)
|
||||
.setPositiveButtonColor(context.resources.getColor(R.color.nc_darkRed))
|
||||
.setTitle(R.string.nc_settings_remove_account)
|
||||
.setMessage(R.string.nc_settings_remove_confirmation)
|
||||
.setPositiveButton(R.string.nc_settings_remove) { removeCurrentAccount() }
|
||||
.setNegativeButton(R.string.nc_cancel, null)
|
||||
.setInstanceStateHandler(ID_REMOVE_ACCOUNT_WARNING_DIALOG, saveStateHandler!!)
|
||||
.setSavedInstanceState(savedInstanceState)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeCurrentAccount() {
|
||||
val user = usersRepository.getActiveUser()
|
||||
user!!.status = UserStatus.PENDING_DELETE
|
||||
GlobalScope.launch {
|
||||
val job = async {
|
||||
usersRepository.updateUser(user)
|
||||
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java)
|
||||
.build()
|
||||
WorkManager.getInstance()
|
||||
.enqueue(accountRemovalWork)
|
||||
}
|
||||
job.await()
|
||||
|
||||
if (usersRepository.setAnyUserAsActive()) {
|
||||
withContext(Dispatchers.Main) {
|
||||
onViewBound(view!!)
|
||||
onAttach(view!!)
|
||||
}
|
||||
} else {
|
||||
router.setRoot(RouterTransaction.with(
|
||||
ServerSelectionController()
|
||||
)
|
||||
.pushChangeHandler(VerticalChangeHandler())
|
||||
.popChangeHandler(VerticalChangeHandler())
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAttach(view: View) {
|
||||
super.onAttach(view)
|
||||
|
||||
if (actionBar != null) {
|
||||
actionBar!!.show()
|
||||
}
|
||||
|
||||
GlobalScope.launch {
|
||||
var hasMultipleUsers: Boolean = false
|
||||
val job = async {
|
||||
currentUser = usersRepository.getActiveUser()
|
||||
hasMultipleUsers = usersRepository.getUsers().size > 0
|
||||
credentials = currentUser!!.getCredentials()
|
||||
}
|
||||
|
||||
job.await()
|
||||
withContext(Dispatchers.Main) {
|
||||
appPreferences.registerProxyTypeListener(proxyTypeChangeListener)
|
||||
appPreferences.registerProxyCredentialsListener { proxyCredentialsChangeListener }
|
||||
appPreferences.registerScreenSecurityListener { screenSecurityChangeListener }
|
||||
@ -357,105 +463,15 @@ class SettingsController : BaseController() {
|
||||
realAlias = ""
|
||||
}
|
||||
|
||||
userUtils.createOrUpdateUser(
|
||||
null, null, null, null, null, null, null,
|
||||
currentUser!!.id, null, realAlias, null
|
||||
)
|
||||
currentUser = usersRepository.getUserWithId(currentUser!!.id!!)
|
||||
currentUser!!.clientCertificate = realAlias
|
||||
GlobalScope.launch {
|
||||
usersRepository.updateUser(currentUser!!)
|
||||
}
|
||||
}, arrayOf("RSA", "EC"), null, finalHost, finalPort,
|
||||
currentUser!!.clientCertificate
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showLovelyDialog(
|
||||
dialogId: Int,
|
||||
savedInstanceState: Bundle?
|
||||
) {
|
||||
when (dialogId) {
|
||||
ID_REMOVE_ACCOUNT_WARNING_DIALOG -> showRemoveAccountWarning(savedInstanceState)
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick(R.id.settings_version)
|
||||
fun sendLogs() {
|
||||
if (resources!!.getBoolean(R.bool.nc_is_debug)) {
|
||||
LoggingUtils.sendMailWithAttachment(context!!)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSaveViewState(
|
||||
view: View,
|
||||
outState: Bundle
|
||||
) {
|
||||
saveStateHandler!!.saveInstanceState(outState)
|
||||
super.onSaveViewState(view, outState)
|
||||
}
|
||||
|
||||
override fun onRestoreViewState(
|
||||
view: View,
|
||||
savedViewState: Bundle
|
||||
) {
|
||||
super.onRestoreViewState(view, savedViewState)
|
||||
if (LovelySaveStateHandler.wasDialogOnScreen(savedViewState)) {
|
||||
//Dialog won't be restarted automatically, so we need to call this method.
|
||||
//Each dialog knows how to restore its viewState
|
||||
showLovelyDialog(LovelySaveStateHandler.getSavedDialogId(savedViewState), savedViewState)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showRemoveAccountWarning(savedInstanceState: Bundle?) {
|
||||
if (activity != null) {
|
||||
LovelyStandardDialog(activity, LovelyStandardDialog.ButtonLayout.HORIZONTAL)
|
||||
.setTopColorRes(R.color.nc_darkRed)
|
||||
.setIcon(
|
||||
DisplayUtils.getTintedDrawable(
|
||||
resources!!,
|
||||
R.drawable.ic_delete_black_24dp, R.color.bg_default
|
||||
)
|
||||
)
|
||||
.setPositiveButtonColor(context.resources.getColor(R.color.nc_darkRed))
|
||||
.setTitle(R.string.nc_settings_remove_account)
|
||||
.setMessage(R.string.nc_settings_remove_confirmation)
|
||||
.setPositiveButton(R.string.nc_settings_remove) { removeCurrentAccount() }
|
||||
.setNegativeButton(R.string.nc_cancel, null)
|
||||
.setInstanceStateHandler(ID_REMOVE_ACCOUNT_WARNING_DIALOG, saveStateHandler!!)
|
||||
.setSavedInstanceState(savedInstanceState)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeCurrentAccount() {
|
||||
val otherUserExists = userUtils!!.scheduleUserForDeletionWithId(currentUser!!.id)
|
||||
|
||||
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java)
|
||||
.build()
|
||||
WorkManager.getInstance()
|
||||
.enqueue(accountRemovalWork)
|
||||
|
||||
if (otherUserExists && view != null) {
|
||||
onViewBound(view!!)
|
||||
onAttach(view!!)
|
||||
} else if (!otherUserExists) {
|
||||
router.setRoot(
|
||||
RouterTransaction.with(
|
||||
ServerSelectionController()
|
||||
)
|
||||
.pushChangeHandler(VerticalChangeHandler())
|
||||
.popChangeHandler(VerticalChangeHandler())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAttach(view: View) {
|
||||
super.onAttach(view)
|
||||
|
||||
if (actionBar != null) {
|
||||
actionBar!!.show()
|
||||
}
|
||||
|
||||
getCurrentUser()
|
||||
|
||||
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
|
||||
certificateSetup!!.setTitle(R.string.nc_client_cert_change)
|
||||
@ -613,22 +629,13 @@ class SettingsController : BaseController() {
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(displayName) && displayName != currentUser!!.displayName) {
|
||||
val user = usersRepository.getUserWithId(currentUser!!.id!!)
|
||||
user.displayName = displayName
|
||||
GlobalScope.launch {
|
||||
usersRepository.updateUser(user)
|
||||
}
|
||||
displayNameTextView!!.text = displayName
|
||||
|
||||
userUtils!!.createOrUpdateUser(
|
||||
null, null, null, displayName, null, null, null, currentUser!!.id, null, null,
|
||||
null
|
||||
)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.`as`<ObservableSubscribeProxy<UserEntity>>(
|
||||
AutoDispose.autoDisposable(scopeProvider)
|
||||
)
|
||||
.subscribe({ userEntityResult ->
|
||||
displayNameTextView!!.setText(
|
||||
userEntityResult.getDisplayName()
|
||||
)
|
||||
},
|
||||
{ throwable -> }, { Log.d(TAG, "") })
|
||||
}
|
||||
}, { throwable -> }, { Log.d(TAG, "") })
|
||||
|
||||
@ -639,7 +646,7 @@ class SettingsController : BaseController() {
|
||||
}
|
||||
}
|
||||
|
||||
if (userUtils!!.users.size <= 1) {
|
||||
if (!hasMultipleUsers) {
|
||||
switchAccountButton!!.visibility = View.GONE
|
||||
}
|
||||
|
||||
@ -689,9 +696,15 @@ class SettingsController : BaseController() {
|
||||
} else {
|
||||
if (messageView != null) {
|
||||
messageView!!.visibility = View.GONE
|
||||
} else {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private fun loadAvatarImage() {
|
||||
val avatarId: String
|
||||
@ -756,8 +769,8 @@ class SettingsController : BaseController() {
|
||||
}
|
||||
|
||||
private fun hideProxyCredentials() {
|
||||
appPreferences!!.removeProxyUsername()
|
||||
appPreferences!!.removeProxyPassword()
|
||||
appPreferences.removeProxyUsername()
|
||||
appPreferences.removeProxyPassword()
|
||||
settingsScreen!!.findViewById<View>(R.id.settings_proxy_username_edit)
|
||||
.visibility = View.GONE
|
||||
settingsScreen!!.findViewById<View>(R.id.settings_proxy_password_edit)
|
||||
|
@ -61,4 +61,8 @@ class UsersRepositoryImpl(val usersDao: UsersDao): UsersRepository {
|
||||
usersDao.deleteUserWithId(id)
|
||||
}
|
||||
|
||||
override suspend fun setAnyUserAsActive(): Boolean {
|
||||
return usersDao.setAnyUserAsActive()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,4 +32,5 @@ interface UsersRepository {
|
||||
suspend fun updateUser(user: UserNgEntity): Int
|
||||
suspend fun setUserAsActiveWithId(id: Long)
|
||||
suspend fun deleteUserWithId(id: Long)
|
||||
suspend fun setAnyUserAsActive(): Boolean
|
||||
}
|
Loading…
Reference in New Issue
Block a user