24
24
package com.owncloud.android.ui.dialog
25
25
26
26
import android.app.Dialog
27
- import android.graphics.drawable.Drawable
27
+ import android.content.DialogInterface
28
28
import android.os.Bundle
29
- import android.view.View
30
- import androidx.appcompat.app.AlertDialog
31
29
import androidx.fragment.app.DialogFragment
32
- import com.google.android.material.button.MaterialButton
33
30
import com.google.android.material.dialog.MaterialAlertDialogBuilder
34
31
import com.nextcloud.client.account.User
35
- import com.nextcloud.client.account.UserAccountManager
36
32
import com.nextcloud.client.di.Injectable
37
33
import com.nextcloud.client.jobs.BackgroundJobManager
38
34
import com.nextcloud.utils.extensions.getParcelableArgument
35
+ import com.nmc.android.utils.DialogThemeUtils
39
36
import com.owncloud.android.R
40
- import com.owncloud.android.databinding.AccountRemovalDialogBinding
41
- import com.owncloud.android.datamodel.FileDataStorageManager
42
- import com.owncloud.android.utils.DisplayUtils
43
- import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener
44
37
import com.owncloud.android.utils.theme.ViewThemeUtils
45
38
import javax.inject.Inject
46
39
47
- class AccountRemovalDialog : DialogFragment (), AvatarGenerationListener, Injectable {
40
+ // NMC Customization: We don't need two option for logout. On logout directly logout the user locally from the app
41
+ class AccountRemovalDialog : DialogFragment (), Injectable {
48
42
49
43
@Inject
50
44
lateinit var backgroundJobManager: BackgroundJobManager
@@ -53,136 +47,33 @@ class AccountRemovalDialog : DialogFragment(), AvatarGenerationListener, Injecta
53
47
lateinit var viewThemeUtils: ViewThemeUtils
54
48
55
49
private var user: User ? = null
56
- private lateinit var alertDialog: AlertDialog
57
- private var _binding : AccountRemovalDialogBinding ? = null
58
- private val binding get() = _binding !!
59
50
60
51
override fun onCreate (savedInstanceState : Bundle ? ) {
61
52
super .onCreate(savedInstanceState)
62
53
user = requireArguments().getParcelableArgument(KEY_USER , User ::class .java)
63
54
}
64
55
65
- override fun onStart () {
66
- super .onStart()
67
-
68
- // disable positive button and apply theming
69
- alertDialog = dialog as AlertDialog
70
- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).isEnabled = false
71
-
72
- viewThemeUtils.platform.themeRadioButton(binding.radioLocalRemove)
73
- viewThemeUtils.platform.themeRadioButton(binding.radioRequestDeletion)
74
- viewThemeUtils.material.colorMaterialButtonPrimaryTonal(
75
- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ) as MaterialButton
76
- )
77
- viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(
78
- alertDialog.getButton(AlertDialog .BUTTON_NEGATIVE ) as MaterialButton
79
- )
80
-
81
- binding.userName.text = UserAccountManager .getDisplayName(user)
82
- binding.account.text = user?.let { DisplayUtils .convertIdn(it.accountName, false ) }
83
- }
84
-
85
56
override fun onCreateDialog (savedInstanceState : Bundle ? ): Dialog {
86
- _binding = AccountRemovalDialogBinding .inflate(layoutInflater)
87
-
88
- // start avatar generation
89
- setAvatar()
90
-
91
- // hide second option when plug-in isn't installed
92
- if (hasDropAccount()) {
93
- binding.requestDeletion.visibility = View .VISIBLE
94
- }
95
-
96
- val builder =
97
- MaterialAlertDialogBuilder (requireActivity())
98
- .setTitle(R .string.delete_account)
99
- .setView(binding.root)
100
- .setNegativeButton(R .string.common_cancel) { _, _ -> }
101
- .setPositiveButton(R .string.delete_account) { _, _ -> removeAccount() }
102
-
103
- // allow selection by clicking on list element
104
- binding.localRemove.setOnClickListener {
105
- binding.radioLocalRemove.performClick()
106
- }
107
- binding.requestDeletion.setOnClickListener {
108
- binding.radioRequestDeletion.performClick()
109
- }
110
-
111
- // set listeners for custom radio button list
112
- binding.radioLocalRemove.setOnClickListener {
113
- binding.radioRequestDeletion.isChecked = false
114
- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).apply {
115
- text = getText(R .string.delete_account)
116
- isEnabled = true
117
- }
118
- }
119
- binding.radioRequestDeletion.setOnClickListener {
120
- binding.radioLocalRemove.isChecked = false
121
- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).apply {
122
- text = getString(R .string.request_account_deletion_button)
123
- isEnabled = true
57
+ val builder = MaterialAlertDialogBuilder (requireActivity())
58
+ .setTitle(R .string.delete_account)
59
+ .setMessage(resources.getString(R .string.delete_account_warning, user!! .accountName))
60
+ .setIcon(R .drawable.ic_warning)
61
+ .setPositiveButton(R .string.common_ok) { _: DialogInterface ? , _: Int ->
62
+ backgroundJobManager.startAccountRemovalJob(
63
+ user!! .accountName,
64
+ false
65
+ )
124
66
}
125
- }
67
+ .setNegativeButton( R .string.common_cancel, null )
126
68
127
- viewThemeUtils.dialog.colorMaterialAlertDialogBackground(requireActivity(), builder)
69
+ // NMC customization
70
+ DialogThemeUtils .colorMaterialAlertDialogBackground(requireActivity(), builder)
128
71
129
72
return builder.create()
130
73
}
131
74
132
- /* *
133
- * Get value of `drop-account` capability.
134
- */
135
- private fun hasDropAccount (): Boolean {
136
- val capability = FileDataStorageManager (user, context?.contentResolver).getCapability(user)
137
- return capability.dropAccount.isTrue
138
- }
139
-
140
- /* *
141
- * Start removal of account. Depending on which option is checked, either a browser will open to request deletion,
142
- * or the local account will be removed immediately.
143
- */
144
- private fun removeAccount () {
145
- user?.let { user ->
146
- if (binding.radioRequestDeletion.isChecked) {
147
- DisplayUtils .startLinkIntent(activity, user.server.uri.toString() + DROP_ACCOUNT_URI )
148
- } else {
149
- backgroundJobManager.startAccountRemovalJob(user.accountName, false )
150
- }
151
- }
152
- }
153
-
154
- /* *
155
- * Start avatar generation.
156
- */
157
- private fun setAvatar () {
158
- try {
159
- val imageView = binding.userIcon
160
- imageView.tag = user!! .accountName
161
- DisplayUtils .setAvatar(
162
- user!! ,
163
- this ,
164
- resources.getDimension(R .dimen.list_item_avatar_icon_radius),
165
- resources,
166
- imageView,
167
- context
168
- )
169
- } catch (_: Exception ) {
170
- }
171
- }
172
-
173
- override fun avatarGenerated (avatarDrawable : Drawable ? , callContext : Any? ) {
174
- avatarDrawable?.let {
175
- binding.userIcon.setImageDrawable(it)
176
- }
177
- }
178
-
179
- override fun shouldCallGeneratedCallback (tag : String? , callContext : Any? ): Boolean {
180
- return binding.userIcon.tag == tag
181
- }
182
-
183
75
companion object {
184
76
private const val KEY_USER = " USER"
185
- private const val DROP_ACCOUNT_URI = " /settings/user/drop_account"
186
77
187
78
@JvmStatic
188
79
fun newInstance (user : User ) = AccountRemovalDialog ().apply {
0 commit comments