Skip to content

Commit cd960f0

Browse files
Merge pull request #17437 from nextcloud/unify-alert-dialog-button-theming
unify alert dialog button theming logic
2 parents ad6b2c5 + 924bc28 commit cd960f0

12 files changed

Lines changed: 38 additions & 148 deletions

app/src/main/java/com/nextcloud/ui/ChooseStorageLocationDialogFragment.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ import android.preference.PreferenceManager
1414
import android.view.LayoutInflater
1515
import android.view.View
1616
import android.view.ViewGroup
17-
import androidx.appcompat.app.AlertDialog
1817
import androidx.fragment.app.DialogFragment
19-
import com.google.android.material.button.MaterialButton
2018
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2119
import com.nextcloud.client.di.Injectable
2220
import com.nextcloud.client.preferences.AppPreferencesImpl
@@ -27,6 +25,7 @@ import com.owncloud.android.datastorage.DataStorageProvider
2725
import com.owncloud.android.datastorage.StoragePoint
2826
import com.owncloud.android.datastorage.StoragePoint.PrivacyType
2927
import com.owncloud.android.datastorage.StoragePoint.StorageType
28+
import com.owncloud.android.ui.dialog.extensions.themeButtons
3029
import com.owncloud.android.ui.model.ExtendedSettingsActivityDialog
3130
import com.owncloud.android.utils.DisplayUtils
3231
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -51,12 +50,7 @@ class ChooseStorageLocationDialogFragment :
5150

5251
override fun onStart() {
5352
super.onStart()
54-
val alertDialog = dialog as AlertDialog
55-
56-
val positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as? MaterialButton
57-
positiveButton?.let {
58-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(positiveButton)
59-
}
53+
dialog?.themeButtons(viewThemeUtils)
6054
}
6155

6256
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

app/src/main/java/com/nextcloud/ui/fileInfo/GovernanceDetailInfo.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,17 @@ package com.nextcloud.ui.fileInfo
1010
import android.graphics.drawable.Drawable
1111
import android.graphics.drawable.GradientDrawable
1212
import android.os.Build
13-
import android.view.View
14-
import android.view.ViewGroup
15-
import android.widget.ArrayAdapter
1613
import android.text.Spannable
1714
import android.text.SpannableString
1815
import android.text.SpannableStringBuilder
1916
import android.text.style.ImageSpan
17+
import android.view.View
18+
import android.view.ViewGroup
19+
import android.widget.ArrayAdapter
2020
import android.widget.TextView
21-
import androidx.appcompat.app.AlertDialog
2221
import androidx.core.content.ContextCompat
2322
import androidx.core.graphics.toColorInt
2423
import androidx.lifecycle.lifecycleScope
25-
import com.google.android.material.button.MaterialButton
2624
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2725
import com.google.android.material.textfield.MaterialAutoCompleteTextView
2826
import com.google.android.material.textfield.TextInputEditText
@@ -33,6 +31,7 @@ import com.nextcloud.ui.fileInfo.model.GovernanceUiState
3331
import com.owncloud.android.R
3432
import com.owncloud.android.databinding.FileInfoFragmentBinding
3533
import com.owncloud.android.lib.common.utils.Log_OC
34+
import com.owncloud.android.ui.dialog.extensions.themeButtons
3635
import com.owncloud.android.utils.DisplayUtils
3736
import com.owncloud.android.utils.theme.ViewThemeUtils
3837
import kotlinx.coroutines.flow.filterIsInstance
@@ -168,9 +167,7 @@ class GovernanceDetailInfo(
168167
.setNegativeButton(android.R.string.cancel, null)
169168
.show()
170169

171-
(dialog.getButton(AlertDialog.BUTTON_POSITIVE) as? MaterialButton)?.let {
172-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(it)
173-
}
170+
dialog.themeButtons(viewThemeUtils)
174171
}
175172

176173
private fun buildLabelSpannable(label: GovernanceLabel): CharSequence {

app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import com.owncloud.android.ui.decoration.MediaGridItemDecoration
5858
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment
5959
import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment
6060
import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment.OnSyncedFolderPreferenceListener
61+
import com.owncloud.android.ui.dialog.extensions.themeButtons
6162
import com.owncloud.android.ui.dialog.parcel.SyncedFolderParcelable
6263
import com.owncloud.android.utils.PermissionUtil
6364
import com.owncloud.android.utils.SyncedFolderUtils
@@ -898,10 +899,6 @@ class SyncedFoldersActivity :
898899
.setIcon(R.drawable.ic_battery_alert)
899900

900901
val alertDialog = dialog.show()
901-
902-
viewThemeUtils.platform.colorTextButtons(
903-
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
904-
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL)
905-
)
902+
alertDialog.themeButtons(viewThemeUtils)
906903
}
907904
}

app/src/main/java/com/owncloud/android/ui/dialog/AccountRemovalDialog.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import android.os.Bundle
1414
import android.view.View
1515
import androidx.appcompat.app.AlertDialog
1616
import androidx.fragment.app.DialogFragment
17-
import com.google.android.material.button.MaterialButton
1817
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1918
import com.nextcloud.client.account.User
2019
import com.nextcloud.client.account.UserAccountManager
@@ -24,6 +23,7 @@ import com.nextcloud.utils.extensions.getParcelableArgument
2423
import com.owncloud.android.R
2524
import com.owncloud.android.databinding.AccountRemovalDialogBinding
2625
import com.owncloud.android.datamodel.FileDataStorageManager
26+
import com.owncloud.android.ui.dialog.extensions.themeButtons
2727
import com.owncloud.android.utils.DisplayUtils
2828
import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener
2929
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -59,13 +59,7 @@ class AccountRemovalDialog :
5959

6060
viewThemeUtils.platform.themeRadioButton(binding.radioLocalRemove)
6161
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-
62+
alertDialog.themeButtons(viewThemeUtils)
6963
binding.userName.text = UserAccountManager.getDisplayName(user)
7064
binding.account.text = user?.let { DisplayUtils.convertIdn(it.accountName, false) }
7165
}

app/src/main/java/com/owncloud/android/ui/dialog/ConfirmationDialogFragment.kt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ import android.R
1414
import android.app.Dialog
1515
import android.content.DialogInterface
1616
import android.os.Bundle
17-
import androidx.appcompat.app.AlertDialog
1817
import androidx.core.content.ContextCompat
1918
import androidx.fragment.app.DialogFragment
20-
import com.google.android.material.button.MaterialButton
2119
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2220
import com.nextcloud.client.di.Injectable
21+
import com.owncloud.android.ui.dialog.extensions.themeButtons
2322
import com.owncloud.android.utils.theme.ViewThemeUtils
2423
import javax.inject.Inject
2524

@@ -35,25 +34,7 @@ open class ConfirmationDialogFragment :
3534

3635
override fun onStart() {
3736
super.onStart()
38-
39-
val alertDialog = dialog as AlertDialog?
40-
41-
if (alertDialog != null) {
42-
val positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as MaterialButton?
43-
if (positiveButton != null) {
44-
viewThemeUtils?.material?.colorMaterialButtonPrimaryTonal(positiveButton)
45-
}
46-
47-
val negativeButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE) as MaterialButton?
48-
if (negativeButton != null) {
49-
viewThemeUtils?.material?.colorMaterialButtonPrimaryBorderless(negativeButton)
50-
}
51-
52-
val neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL) as MaterialButton?
53-
if (neutralButton != null) {
54-
viewThemeUtils?.material?.colorMaterialButtonPrimaryBorderless(neutralButton)
55-
}
56-
}
37+
dialog?.themeButtons(viewThemeUtils)
5738
}
5839

5940
fun setOnConfirmationListener(listener: ConfirmationDialogFragmentListener?) {

app/src/main/java/com/owncloud/android/ui/dialog/LocalStoragePathPickerDialogFragment.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import android.os.Environment
1313
import androidx.appcompat.app.AlertDialog
1414
import androidx.fragment.app.DialogFragment
1515
import androidx.recyclerview.widget.LinearLayoutManager
16-
import com.google.android.material.button.MaterialButton
1716
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1817
import com.nextcloud.client.di.Injectable
1918
import com.owncloud.android.R
2019
import com.owncloud.android.databinding.StoragePathDialogBinding
2120
import com.owncloud.android.ui.adapter.StoragePathAdapter
2221
import com.owncloud.android.ui.adapter.StoragePathAdapter.StoragePathAdapterListener
2322
import com.owncloud.android.ui.adapter.StoragePathItem
23+
import com.owncloud.android.ui.dialog.extensions.themeButtons
2424
import com.owncloud.android.utils.FileStorageUtils
2525
import com.owncloud.android.utils.FileStorageUtils.StandardDirectory
2626
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -40,13 +40,7 @@ class LocalStoragePathPickerDialogFragment :
4040

4141
override fun onStart() {
4242
super.onStart()
43-
44-
val alertDialog = dialog as AlertDialog?
45-
46-
val positiveButton = alertDialog?.getButton(AlertDialog.BUTTON_POSITIVE) as MaterialButton?
47-
positiveButton?.let {
48-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(positiveButton)
49-
}
43+
dialog?.themeButtons(viewThemeUtils)
5044
}
5145

5246
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

app/src/main/java/com/owncloud/android/ui/dialog/RemoveFilesDialogFragment.kt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ package com.owncloud.android.ui.dialog
1515
import android.app.Dialog
1616
import android.os.Bundle
1717
import android.view.ActionMode
18-
import androidx.appcompat.app.AlertDialog
1918
import androidx.lifecycle.lifecycleScope
20-
import com.google.android.material.button.MaterialButton
2119
import com.nextcloud.client.account.UserAccountManager
2220
import com.nextcloud.client.di.Injectable
2321
import com.nextcloud.client.jobs.upload.FileUploadHelper
@@ -30,6 +28,7 @@ import com.owncloud.android.datamodel.OCFile
3028
import com.owncloud.android.ui.activity.FileActivity
3129
import com.owncloud.android.ui.activity.OnFilesRemovedListener
3230
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener
31+
import com.owncloud.android.ui.dialog.extensions.themeButtons
3332
import kotlinx.coroutines.Dispatchers
3433
import kotlinx.coroutines.launch
3534
import kotlinx.coroutines.withContext
@@ -51,27 +50,9 @@ class RemoveFilesDialogFragment :
5150
@Inject
5251
lateinit var userAccountManager: UserAccountManager
5352

54-
private var positiveButton: MaterialButton? = null
55-
5653
override fun onStart() {
5754
super.onStart()
58-
59-
val alertDialog = dialog as AlertDialog? ?: return
60-
61-
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as? MaterialButton
62-
positiveButton?.let {
63-
viewThemeUtils?.material?.colorMaterialButtonPrimaryTonal(it)
64-
}
65-
66-
val negativeButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE) as? MaterialButton
67-
negativeButton?.let {
68-
viewThemeUtils?.material?.colorMaterialButtonPrimaryBorderless(negativeButton)
69-
}
70-
71-
val neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL) as? MaterialButton
72-
neutralButton?.let {
73-
viewThemeUtils?.material?.colorMaterialButtonPrimaryBorderless(neutralButton)
74-
}
55+
dialog?.themeButtons(viewThemeUtils)
7556
}
7657

7758
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.kt

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.owncloud.android.datamodel.OCFile
3232
import com.owncloud.android.lib.resources.status.OCCapability
3333
import com.owncloud.android.ui.activity.ComponentsGetter
3434
import com.owncloud.android.ui.activity.FileDisplayActivity
35+
import com.owncloud.android.ui.dialog.extensions.themeButtons
3536
import com.owncloud.android.utils.DisplayUtils
3637
import com.owncloud.android.utils.KeyboardUtils
3738
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -60,7 +61,7 @@ class RenameFileDialogFragment :
6061

6162
override fun onStart() {
6263
super.onStart()
63-
initAlertDialog()
64+
dialog?.themeButtons(viewThemeUtils)
6465
}
6566

6667
override fun onResume() {
@@ -133,20 +134,6 @@ class RenameFileDialogFragment :
133134
return builder
134135
}
135136

136-
private fun initAlertDialog() {
137-
val alertDialog = dialog as AlertDialog?
138-
139-
if (alertDialog != null) {
140-
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as MaterialButton
141-
val negativeButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE) as MaterialButton
142-
143-
positiveButton?.let {
144-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(it)
145-
}
146-
viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(negativeButton)
147-
}
148-
}
149-
150137
private val oCCapability: OCCapability
151138
get() = fileDataStorageManager.getCapability(currentAccount.user.accountName)
152139

app/src/main/java/com/owncloud/android/ui/dialog/StoragePermissionDialogFragment.kt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@ import android.app.Dialog
1212
import android.os.Build
1313
import android.os.Bundle
1414
import androidx.annotation.RequiresApi
15-
import androidx.appcompat.app.AlertDialog
1615
import androidx.fragment.app.DialogFragment
17-
import com.google.android.material.button.MaterialButton
1816
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1917
import com.nextcloud.client.di.Injectable
2018
import com.nextcloud.client.preferences.AppPreferences
2119
import com.owncloud.android.R
20+
import com.owncloud.android.ui.dialog.extensions.themeButtons
2221
import com.owncloud.android.utils.PermissionUtil
2322
import com.owncloud.android.utils.theme.ViewThemeUtils
2423
import javax.inject.Inject
@@ -47,18 +46,7 @@ class StoragePermissionDialogFragment :
4746
override fun onStart() {
4847
super.onStart()
4948
dialog?.setCanceledOnTouchOutside(false)
50-
dialog?.let {
51-
val alertDialog = it as AlertDialog
52-
53-
val positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as MaterialButton
54-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(positiveButton)
55-
56-
val negativeButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE) as MaterialButton
57-
viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(negativeButton)
58-
59-
val neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL) as MaterialButton
60-
viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(neutralButton)
61-
}
49+
dialog?.themeButtons(viewThemeUtils)
6250
}
6351

6452
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

app/src/main/java/com/owncloud/android/ui/dialog/ThemeSelectionDialog.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,17 @@ package com.owncloud.android.ui.dialog
99

1010
import android.app.Dialog
1111
import android.os.Bundle
12-
import androidx.appcompat.app.AlertDialog
1312
import androidx.core.os.bundleOf
1413
import androidx.fragment.app.DialogFragment
1514
import androidx.fragment.app.setFragmentResult
16-
import com.google.android.material.button.MaterialButton
1715
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1816
import com.nextcloud.client.di.Injectable
1917
import com.nextcloud.client.preferences.AppPreferences
2018
import com.nextcloud.client.preferences.DarkMode
2119
import com.owncloud.android.MainApp
2220
import com.owncloud.android.R
2321
import com.owncloud.android.databinding.DialogThemeSelectionBinding
22+
import com.owncloud.android.ui.dialog.extensions.themeButtons
2423
import com.owncloud.android.ui.model.ExtendedSettingsActivityDialog
2524
import com.owncloud.android.utils.theme.ViewThemeUtils
2625
import javax.inject.Inject
@@ -41,12 +40,7 @@ class ThemeSelectionDialog :
4140

4241
override fun onStart() {
4342
super.onStart()
44-
val alertDialog = dialog as AlertDialog
45-
46-
val positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE) as? MaterialButton
47-
positiveButton?.let {
48-
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(positiveButton)
49-
}
43+
dialog?.themeButtons(viewThemeUtils)
5044
}
5145

5246
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

0 commit comments

Comments
 (0)