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.RingtoneSettings
|
||||||
import com.nextcloud.talk.models.database.UserEntity
|
import com.nextcloud.talk.models.database.UserEntity
|
||||||
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
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.newarch.utils.getCredentials
|
||||||
import com.nextcloud.talk.utils.ApiUtils
|
import com.nextcloud.talk.utils.ApiUtils
|
||||||
import com.nextcloud.talk.utils.DisplayUtils
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
@ -83,6 +87,7 @@ import com.yarolegovich.mp.MaterialStandardPreference
|
|||||||
import com.yarolegovich.mp.MaterialSwitchPreference
|
import com.yarolegovich.mp.MaterialSwitchPreference
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
import kotlinx.coroutines.*
|
||||||
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
|
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@ -175,9 +180,9 @@ class SettingsController : BaseController() {
|
|||||||
@JvmField
|
@JvmField
|
||||||
@Inject
|
@Inject
|
||||||
var ncApi: NcApi? = null
|
var ncApi: NcApi? = null
|
||||||
val userUtils: UserUtils by inject()
|
val usersRepository: UsersRepository by inject()
|
||||||
private var saveStateHandler: LovelySaveStateHandler? = null
|
private var saveStateHandler: LovelySaveStateHandler? = null
|
||||||
private var currentUser: UserEntity? = null
|
private var currentUser: UserNgEntity? = null
|
||||||
private var credentials: String? = null
|
private var credentials: String? = null
|
||||||
lateinit var proxyTypeChangeListener: OnPreferenceValueChangedListener<String>
|
lateinit var proxyTypeChangeListener: OnPreferenceValueChangedListener<String>
|
||||||
lateinit var proxyCredentialsChangeListener: OnPreferenceValueChangedListener<Boolean>
|
lateinit var proxyCredentialsChangeListener: OnPreferenceValueChangedListener<Boolean>
|
||||||
@ -193,11 +198,6 @@ class SettingsController : BaseController() {
|
|||||||
return inflater.inflate(R.layout.controller_settings, container, false)
|
return inflater.inflate(R.layout.controller_settings, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCurrentUser() {
|
|
||||||
currentUser = userUtils.currentUser
|
|
||||||
credentials = currentUser!!.getCredentials()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewBound(view: View) {
|
override fun onViewBound(view: View) {
|
||||||
super.onViewBound(view)
|
super.onViewBound(view)
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
@ -207,8 +207,6 @@ class SettingsController : BaseController() {
|
|||||||
.componentApplication
|
.componentApplication
|
||||||
.inject(this)
|
.inject(this)
|
||||||
|
|
||||||
getCurrentUser()
|
|
||||||
|
|
||||||
if (saveStateHandler == null) {
|
if (saveStateHandler == null) {
|
||||||
saveStateHandler = LovelySaveStateHandler()
|
saveStateHandler = LovelySaveStateHandler()
|
||||||
}
|
}
|
||||||
@ -219,6 +217,114 @@ class SettingsController : BaseController() {
|
|||||||
screenLockChangeListener = ScreenLockListener()
|
screenLockChangeListener = ScreenLockListener()
|
||||||
screenLockTimeoutChangeListener = ScreenLockTimeoutListener()
|
screenLockTimeoutChangeListener = ScreenLockTimeoutListener()
|
||||||
themeChangeListener = ThemeChangeListener()
|
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.registerProxyTypeListener(proxyTypeChangeListener)
|
||||||
appPreferences.registerProxyCredentialsListener { proxyCredentialsChangeListener }
|
appPreferences.registerProxyCredentialsListener { proxyCredentialsChangeListener }
|
||||||
appPreferences.registerScreenSecurityListener { screenSecurityChangeListener }
|
appPreferences.registerScreenSecurityListener { screenSecurityChangeListener }
|
||||||
@ -357,105 +463,15 @@ class SettingsController : BaseController() {
|
|||||||
realAlias = ""
|
realAlias = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
userUtils.createOrUpdateUser(
|
currentUser = usersRepository.getUserWithId(currentUser!!.id!!)
|
||||||
null, null, null, null, null, null, null,
|
currentUser!!.clientCertificate = realAlias
|
||||||
currentUser!!.id, null, realAlias, null
|
GlobalScope.launch {
|
||||||
)
|
usersRepository.updateUser(currentUser!!)
|
||||||
|
}
|
||||||
}, arrayOf("RSA", "EC"), null, finalHost, finalPort,
|
}, arrayOf("RSA", "EC"), null, finalHost, finalPort,
|
||||||
currentUser!!.clientCertificate
|
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)) {
|
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
|
||||||
certificateSetup!!.setTitle(R.string.nc_client_cert_change)
|
certificateSetup!!.setTitle(R.string.nc_client_cert_change)
|
||||||
@ -613,22 +629,13 @@ class SettingsController : BaseController() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(displayName) && displayName != currentUser!!.displayName) {
|
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, "") })
|
}, { throwable -> }, { Log.d(TAG, "") })
|
||||||
|
|
||||||
@ -639,7 +646,7 @@ class SettingsController : BaseController() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userUtils!!.users.size <= 1) {
|
if (!hasMultipleUsers) {
|
||||||
switchAccountButton!!.visibility = View.GONE
|
switchAccountButton!!.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -689,9 +696,15 @@ class SettingsController : BaseController() {
|
|||||||
} else {
|
} else {
|
||||||
if (messageView != null) {
|
if (messageView != null) {
|
||||||
messageView!!.visibility = View.GONE
|
messageView!!.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private fun loadAvatarImage() {
|
private fun loadAvatarImage() {
|
||||||
val avatarId: String
|
val avatarId: String
|
||||||
@ -756,8 +769,8 @@ class SettingsController : BaseController() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun hideProxyCredentials() {
|
private fun hideProxyCredentials() {
|
||||||
appPreferences!!.removeProxyUsername()
|
appPreferences.removeProxyUsername()
|
||||||
appPreferences!!.removeProxyPassword()
|
appPreferences.removeProxyPassword()
|
||||||
settingsScreen!!.findViewById<View>(R.id.settings_proxy_username_edit)
|
settingsScreen!!.findViewById<View>(R.id.settings_proxy_username_edit)
|
||||||
.visibility = View.GONE
|
.visibility = View.GONE
|
||||||
settingsScreen!!.findViewById<View>(R.id.settings_proxy_password_edit)
|
settingsScreen!!.findViewById<View>(R.id.settings_proxy_password_edit)
|
||||||
|
@ -61,4 +61,8 @@ class UsersRepositoryImpl(val usersDao: UsersDao): UsersRepository {
|
|||||||
usersDao.deleteUserWithId(id)
|
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 updateUser(user: UserNgEntity): Int
|
||||||
suspend fun setUserAsActiveWithId(id: Long)
|
suspend fun setUserAsActiveWithId(id: Long)
|
||||||
suspend fun deleteUserWithId(id: Long)
|
suspend fun deleteUserWithId(id: Long)
|
||||||
|
suspend fun setAnyUserAsActive(): Boolean
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user