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 :
33- DialogFragment (),
34- AvatarGenerationListener ,
35- 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 {
3627
3728 @Inject
3829 lateinit var backgroundJobManager: BackgroundJobManager
@@ -41,134 +32,33 @@ class AccountRemovalDialog :
4132 lateinit var viewThemeUtils: ViewThemeUtils
4233
4334 private var user: User ? = null
44- private lateinit var alertDialog: AlertDialog
45- private var _binding : AccountRemovalDialogBinding ? = null
46- val binding get() = _binding !!
4735
4836 override fun onCreate (savedInstanceState : Bundle ? ) {
4937 super .onCreate(savedInstanceState)
5038 user = requireArguments().getParcelableArgument(KEY_USER , User ::class .java)
5139 }
5240
53- override fun onStart () {
54- super .onStart()
55-
56- // disable positive button and apply theming
57- alertDialog = dialog as AlertDialog
58- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).isEnabled = false
59-
60- viewThemeUtils.platform.themeRadioButton(binding.radioLocalRemove)
61- viewThemeUtils.platform.themeRadioButton(binding.radioRequestDeletion)
62- viewThemeUtils.material.colorMaterialButtonPrimaryTonal(
63- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ) as MaterialButton
64- )
65- viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(
66- alertDialog.getButton(AlertDialog .BUTTON_NEGATIVE ) as MaterialButton
67- )
68-
69- binding.userName.text = UserAccountManager .getDisplayName(user)
70- binding.account.text = user?.let { DisplayUtils .convertIdn(it.accountName, false ) }
71- }
72-
7341 override fun onCreateDialog (savedInstanceState : Bundle ? ): Dialog {
74- _binding = AccountRemovalDialogBinding .inflate(layoutInflater)
75-
76- // start avatar generation
77- setAvatar()
78-
79- // hide second option when plug-in isn't installed
80- if (hasDropAccount()) {
81- binding.requestDeletion.visibility = View .VISIBLE
82- }
83-
84- val builder =
85- MaterialAlertDialogBuilder (requireActivity())
86- .setTitle(R .string.delete_account)
87- .setView(binding.root)
88- .setNegativeButton(R .string.common_cancel) { _, _ -> }
89- .setPositiveButton(R .string.delete_account) { _, _ -> removeAccount() }
90-
91- // allow selection by clicking on list element
92- binding.localRemove.setOnClickListener {
93- binding.radioLocalRemove.performClick()
94- }
95- binding.requestDeletion.setOnClickListener {
96- binding.radioRequestDeletion.performClick()
97- }
98-
99- // set listeners for custom radio button list
100- binding.radioLocalRemove.setOnClickListener {
101- binding.radioRequestDeletion.isChecked = false
102- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).apply {
103- text = getText(R .string.delete_account)
104- isEnabled = true
105- }
106- }
107- binding.radioRequestDeletion.setOnClickListener {
108- binding.radioLocalRemove.isChecked = false
109- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ).apply {
110- text = getString(R .string.request_account_deletion_button)
111- 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+ )
11251 }
113- }
52+ .setNegativeButton( R .string.common_cancel, null )
11453
115- viewThemeUtils.dialog.colorMaterialAlertDialogBackground(requireActivity(), builder)
54+ // NMC customization
55+ DialogThemeUtils .colorMaterialAlertDialogBackground(requireActivity(), builder)
11656
11757 return builder.create()
11858 }
11959
120- /* *
121- * Get value of `drop-account` capability.
122- */
123- private fun hasDropAccount (): Boolean {
124- val capability = FileDataStorageManager (user, context?.contentResolver).getCapability(user)
125- return capability.dropAccount.isTrue
126- }
127-
128- /* *
129- * Start removal of account. Depending on which option is checked, either a browser will open to request deletion,
130- * or the local account will be removed immediately.
131- */
132- private fun removeAccount () {
133- user?.let { user ->
134- if (binding.radioRequestDeletion.isChecked) {
135- DisplayUtils .startLinkIntent(activity, user.server.uri.toString() + DROP_ACCOUNT_URI )
136- } else {
137- backgroundJobManager.startAccountRemovalJob(user.accountName, false )
138- }
139- }
140- }
141-
142- /* *
143- * Start avatar generation.
144- */
145- private fun setAvatar () {
146- try {
147- val imageView = binding.userIcon
148- imageView.tag = user!! .accountName
149- DisplayUtils .setAvatar(
150- user!! ,
151- this ,
152- resources.getDimension(R .dimen.list_item_avatar_icon_radius),
153- resources,
154- imageView,
155- context
156- )
157- } catch (_: Exception ) {
158- }
159- }
160-
161- override fun avatarGenerated (avatarDrawable : Drawable ? , callContext : Any? ) {
162- avatarDrawable?.let {
163- binding.userIcon.setImageDrawable(it)
164- }
165- }
166-
167- override fun shouldCallGeneratedCallback (tag : String? , callContext : Any? ): Boolean = binding.userIcon.tag == tag
168-
16960 companion object {
17061 private const val KEY_USER = " USER"
171- private const val DROP_ACCOUNT_URI = " /settings/user/drop_account"
17262
17363 @JvmStatic
17464 fun newInstance (user : User ) = AccountRemovalDialog ().apply {
0 commit comments