99package com.owncloud.android.ui.dialog
1010
1111import android.app.Dialog
12- import android.graphics.drawable.Drawable
12+ import android.content.DialogInterface
1313import android.os.Bundle
14- import android.view.View
15- import androidx.appcompat.app.AlertDialog
1614import androidx.fragment.app.DialogFragment
17- import com.google.android.material.button.MaterialButton
1815import com.google.android.material.dialog.MaterialAlertDialogBuilder
1916import com.nextcloud.client.account.User
20- import com.nextcloud.client.account.UserAccountManager
2117import com.nextcloud.client.di.Injectable
2218import com.nextcloud.client.jobs.BackgroundJobManager
2319import com.nextcloud.utils.extensions.getParcelableArgument
20+ import com.nmc.android.utils.DialogThemeUtils
2421import 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
2922import com.owncloud.android.utils.theme.ViewThemeUtils
3023import javax.inject.Inject
3124
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 {
3327
3428 @Inject
3529 lateinit var backgroundJobManager: BackgroundJobManager
@@ -38,136 +32,33 @@ class AccountRemovalDialog : DialogFragment(), AvatarGenerationListener, Injecta
3832 lateinit var viewThemeUtils: ViewThemeUtils
3933
4034 private var user: User ? = null
41- private lateinit var alertDialog: AlertDialog
42- private var _binding : AccountRemovalDialogBinding ? = null
43- val binding get() = _binding !!
4435
4536 override fun onCreate (savedInstanceState : Bundle ? ) {
4637 super .onCreate(savedInstanceState)
4738 user = requireArguments().getParcelableArgument(KEY_USER , User ::class .java)
4839 }
4940
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-
7041 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+ )
10951 }
110- }
52+ .setNegativeButton( R .string.common_cancel, null )
11153
112- viewThemeUtils.dialog.colorMaterialAlertDialogBackground(requireActivity(), builder)
54+ // NMC customization
55+ DialogThemeUtils .colorMaterialAlertDialogBackground(requireActivity(), builder)
11356
11457 return builder.create()
11558 }
11659
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-
16860 companion object {
16961 private const val KEY_USER = " USER"
170- private const val DROP_ACCOUNT_URI = " /settings/user/drop_account"
17162
17263 @JvmStatic
17364 fun newInstance (user : User ) = AccountRemovalDialog ().apply {
0 commit comments