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