2424package com.owncloud.android.ui.dialog
2525
2626import android.app.Dialog
27- import android.graphics.drawable.Drawable
27+ import android.content.DialogInterface
2828import android.os.Bundle
29- import android.view.View
30- import androidx.appcompat.app.AlertDialog
3129import androidx.fragment.app.DialogFragment
32- import com.google.android.material.button.MaterialButton
3330import com.google.android.material.dialog.MaterialAlertDialogBuilder
3431import com.nextcloud.client.account.User
35- import com.nextcloud.client.account.UserAccountManager
3632import com.nextcloud.client.di.Injectable
3733import com.nextcloud.client.jobs.BackgroundJobManager
3834import com.nextcloud.utils.extensions.getParcelableArgument
35+ import com.nmc.android.utils.DialogThemeUtils
3936import 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
4437import com.owncloud.android.utils.theme.ViewThemeUtils
4538import javax.inject.Inject
4639
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 {
4842
4943 @Inject
5044 lateinit var backgroundJobManager: BackgroundJobManager
@@ -53,136 +47,33 @@ class AccountRemovalDialog : DialogFragment(), AvatarGenerationListener, Injecta
5347 lateinit var viewThemeUtils: ViewThemeUtils
5448
5549 private var user: User ? = null
56- private lateinit var alertDialog: AlertDialog
57- private var _binding : AccountRemovalDialogBinding ? = null
58- private val binding get() = _binding !!
5950
6051 override fun onCreate (savedInstanceState : Bundle ? ) {
6152 super .onCreate(savedInstanceState)
6253 user = requireArguments().getParcelableArgument(KEY_USER , User ::class .java)
6354 }
6455
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-
8556 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+ )
12466 }
125- }
67+ .setNegativeButton( R .string.common_cancel, null )
12668
127- viewThemeUtils.dialog.colorMaterialAlertDialogBackground(requireActivity(), builder)
69+ // NMC customization
70+ DialogThemeUtils .colorMaterialAlertDialogBackground(requireActivity(), builder)
12871
12972 return builder.create()
13073 }
13174
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-
18375 companion object {
18476 private const val KEY_USER = " USER"
185- private const val DROP_ACCOUNT_URI = " /settings/user/drop_account"
18677
18778 @JvmStatic
18879 fun newInstance (user : User ) = AccountRemovalDialog ().apply {
0 commit comments