From 05c60ff4b7bfa4b50c0d877ef21cebfabcfc1125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Tue, 30 Aug 2022 15:23:14 +0200 Subject: [PATCH] Finish splitting ViewThemeUtils MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Álvaro Brey --- .../nextcloud/talk/activities/BaseActivity.kt | 4 +- .../talk/adapters/items/ConversationItem.java | 2 +- .../talk/adapters/items/MessageResultItem.kt | 8 +- .../talk/controllers/ChatController.kt | 2 +- .../talk/controllers/ContactsController.kt | 4 +- .../controllers/ConversationInfoController.kt | 12 +-- .../ConversationsListController.kt | 23 +++-- .../talk/controllers/SettingsController.kt | 8 +- .../adapters/PollResultHeaderViewHolder.kt | 4 +- .../adapters/PollResultVoterViewHolder.kt | 2 +- .../talk/polls/ui/PollCreateDialogFragment.kt | 2 +- .../talk/polls/ui/PollMainDialogFragment.kt | 10 +- .../talk/polls/ui/PollResultsFragment.kt | 2 +- .../talk/polls/ui/PollVoteFragment.kt | 2 +- .../activities/RemoteFileBrowserActivity.kt | 2 +- .../dialog/ChooseAccountDialogFragment.java | 6 +- .../talk/ui/dialog/SetStatusDialogFragment.kt | 2 +- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 80 ++------------- .../viewthemeutils/AndroidViewThemeUtils.kt | 11 +++ ...hemeUtils.kt => AndroidXViewThemeUtils.kt} | 15 ++- .../viewthemeutils/DialogViewThemeUtils.kt | 99 +++++++++++++++++++ .../viewthemeutils/MaterialViewThemeUtils.kt | 25 ----- .../TalkSpecificViewThemeUtils.kt | 2 +- .../preferences/MagicUserInputModule.java | 2 +- 24 files changed, 179 insertions(+), 150 deletions(-) rename app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/{AppCompatViewThemeUtils.kt => AndroidXViewThemeUtils.kt} (84%) create mode 100644 app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/DialogViewThemeUtils.kt diff --git a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt index e6e418f09..538379357 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt @@ -117,7 +117,7 @@ open class BaseActivity : AppCompatActivity() { ) val dialogBuilder = MaterialAlertDialogBuilder(this) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_security_white_24dp)) + .setIcon(viewThemeUtils.dialog.colorMaterialAlertDialogIcon(context, R.drawable.ic_security_white_24dp)) .setTitle(R.string.nc_certificate_dialog_title) .setMessage(dialogText) .setPositiveButton(R.string.nc_yes) { _, _ -> @@ -128,7 +128,7 @@ open class BaseActivity : AppCompatActivity() { sslErrorHandler?.cancel() } - viewThemeUtils.material.colorMaterialAlertDialogBackground(context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(context, dialogBuilder) val dialog = dialogBuilder.show() diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java index e0fd1275e..7110277df 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java @@ -143,7 +143,7 @@ public class ConversationItem extends AbstractFlexibleItem @@ -374,7 +374,7 @@ class ConversationInfoController(args: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> // unused atm } - viewThemeUtils.material + viewThemeUtils.dialog .colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( @@ -537,7 +537,7 @@ class ConversationInfoController(args: Bundle) : private fun showClearHistoryDialog() { if (activity != null) { val dialogBuilder = MaterialAlertDialogBuilder(binding.conversationInfoName.context) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp)) + .setIcon(viewThemeUtils.dialog.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp)) .setTitle(R.string.nc_clear_history) .setMessage(R.string.nc_clear_history_warning) .setPositiveButton(R.string.nc_delete_all) { _, _ -> @@ -546,7 +546,7 @@ class ConversationInfoController(args: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> // unused atm } - viewThemeUtils.material + viewThemeUtils.dialog .colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt index 033b464fa..d83a17897 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt @@ -296,7 +296,7 @@ class ConversationsListController(bundle: Bundle) : val searchManager = activity!!.getSystemService(Context.SEARCH_SERVICE) as SearchManager? if (searchItem != null) { searchView = MenuItemCompat.getActionView(searchItem) as SearchView - viewThemeUtils.appcompat.themeSearchView(searchView!!) + viewThemeUtils.androidx.themeSearchView(searchView!!) searchView!!.maxWidth = Int.MAX_VALUE searchView!!.inputType = InputType.TYPE_TEXT_VARIATION_FILTER var imeOptions = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_FULLSCREEN @@ -666,7 +666,7 @@ class ConversationsListController(bundle: Bundle) : false } binding.swipeRefreshLayoutView.setOnRefreshListener { fetchData() } - viewThemeUtils.themeSwipeRefreshLayout(binding.swipeRefreshLayoutView) + viewThemeUtils.androidx.themeSwipeRefreshLayout(binding.swipeRefreshLayoutView) binding.emptyLayout.setOnClickListener { showNewConversationsScreen() } binding.floatingActionButton.setOnClickListener { run(context) @@ -939,7 +939,7 @@ class ConversationsListController(bundle: Bundle) : ) } val dialogBuilder = MaterialAlertDialogBuilder(binding.floatingActionButton.context) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.upload)) + .setIcon(viewThemeUtils.dialog.colorMaterialAlertDialogIcon(context, R.drawable.upload)) .setTitle(confirmationQuestion) .setMessage(fileNamesWithLineBreaks.toString()) .setPositiveButton(R.string.nc_yes) { _, _ -> @@ -950,7 +950,7 @@ class ConversationsListController(bundle: Bundle) : Log.d(TAG, "sharing files aborted, going back to share-to screen") showShareToScreen = true } - viewThemeUtils.material + viewThemeUtils.dialog .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( @@ -1131,7 +1131,10 @@ class ConversationsListController(bundle: Bundle) : val conversation = Parcels.unwrap(conversationMenuBundle!!.getParcelable(KEY_ROOM)) if (conversation != null) { val dialogBuilder = MaterialAlertDialogBuilder(binding.floatingActionButton.context) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp)) + .setIcon( + viewThemeUtils.dialog + .colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp) + ) .setTitle(R.string.nc_delete_call) .setMessage(R.string.nc_delete_conversation_more) .setPositiveButton(R.string.nc_delete) { _, _ -> @@ -1147,7 +1150,7 @@ class ConversationsListController(bundle: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> conversationMenuBundle = null } - viewThemeUtils.material + viewThemeUtils.dialog .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( @@ -1161,7 +1164,7 @@ class ConversationsListController(bundle: Bundle) : private fun showUnauthorizedDialog() { if (activity != null) { val dialogBuilder = MaterialAlertDialogBuilder(binding.floatingActionButton.context) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp)) + .setIcon(viewThemeUtils.dialog.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp)) .setTitle(R.string.nc_dialog_invalid_password) .setMessage(R.string.nc_dialog_reauth_or_delete) .setCancelable(false) @@ -1191,7 +1194,7 @@ class ConversationsListController(bundle: Bundle) : .popChangeHandler(VerticalChangeHandler()) ) } - viewThemeUtils.material + viewThemeUtils.dialog .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( @@ -1203,7 +1206,7 @@ class ConversationsListController(bundle: Bundle) : private fun showServerEOLDialog() { val dialogBuilder = MaterialAlertDialogBuilder(binding.floatingActionButton.context) - .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_warning_white)) + .setIcon(viewThemeUtils.dialog.colorMaterialAlertDialogIcon(context, R.drawable.ic_warning_white)) .setTitle(R.string.nc_settings_server_eol_title) .setMessage(R.string.nc_settings_server_eol) .setCancelable(false) @@ -1234,7 +1237,7 @@ class ConversationsListController(bundle: Bundle) : activity!!.finish() } } - viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt index 96e00af26..8ff743bde 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -385,7 +385,7 @@ class SettingsController : BaseController(R.layout.controller_settings) { // unused atm } - viewThemeUtils.material.colorMaterialAlertDialogBackground( + viewThemeUtils.dialog.colorMaterialAlertDialogBackground( binding.messageText.context, materialAlertDialogBuilder ) @@ -508,7 +508,7 @@ class SettingsController : BaseController(R.layout.controller_settings) { settingsPhoneBookIntegration, settingsReadPrivacy, settingsProxyUseCredentials - ).forEach(viewThemeUtils::colorSwitchPreference) + ).forEach(viewThemeUtils.talk::colorSwitchPreference) } } @@ -520,7 +520,7 @@ class SettingsController : BaseController(R.layout.controller_settings) { settingsAdvancedCategory, settingsAppearanceCategory, settingsPrivacyCategory - ).forEach(viewThemeUtils::colorPreferenceCategory) + ).forEach(viewThemeUtils.talk::colorPreferenceCategory) } } @@ -952,7 +952,7 @@ class SettingsController : BaseController(R.layout.controller_settings) { .setPositiveButton(context!!.resources.getString(R.string.nc_common_set), null) .setNegativeButton(context!!.resources.getString(R.string.nc_common_skip), null) - viewThemeUtils.material.colorMaterialAlertDialogBackground(phoneNumberInputLayout.context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(phoneNumberInputLayout.context, dialogBuilder) val dialog = dialogBuilder.create() dialog.setOnShowListener(object : OnShowListener { diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultHeaderViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultHeaderViewHolder.kt index 0f46fc298..44749193a 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultHeaderViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultHeaderViewHolder.kt @@ -41,8 +41,8 @@ class PollResultHeaderViewHolder( binding.pollOptionText.text = item.name binding.pollOptionPercentText.text = "${item.percent}%" - viewThemeUtils.colorDialogSupportingText(binding.pollOptionText) - viewThemeUtils.colorDialogSupportingText(binding.pollOptionPercentText) + viewThemeUtils.dialog.colorDialogSupportingText(binding.pollOptionText) + viewThemeUtils.dialog.colorDialogSupportingText(binding.pollOptionPercentText) if (item.selfVoted) { binding.pollOptionText.setTypeface(null, Typeface.BOLD) diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt index 781b10e8c..e69f0038b 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollResultVoterViewHolder.kt @@ -47,7 +47,7 @@ class PollResultVoterViewHolder( binding.pollVoterName.text = item.details.actorDisplayName binding.pollVoterAvatar.controller = getAvatarDraweeController(item.details) - viewThemeUtils.colorDialogSupportingText(binding.pollVoterName) + viewThemeUtils.dialog.colorDialogSupportingText(binding.pollVoterName) } private fun getAvatarDraweeController(pollDetail: PollDetails): DraweeController? { diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt index c583b5109..e318f8f14 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt @@ -75,7 +75,7 @@ class PollCreateDialogFragment : DialogFragment(), PollCreateOptionsItemListener val dialogBuilder = MaterialAlertDialogBuilder(binding.root.context) .setView(binding.root) - viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) return dialogBuilder.create() } diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt index 179d778a5..0b16d522c 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt @@ -72,13 +72,13 @@ class PollMainDialogFragment : DialogFragment() { val dialogBuilder = MaterialAlertDialogBuilder(binding.root.context).setView(binding.root) - viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) val dialog = dialogBuilder.create() binding.messagePollTitle.text = viewModel.pollTitle - viewThemeUtils.colorDialogHeadline(binding.messagePollTitle) - viewThemeUtils.colorDialogIcon(binding.messagePollIcon) + viewThemeUtils.dialog.colorDialogHeadline(binding.messagePollTitle) + viewThemeUtils.dialog.colorDialogIcon(binding.messagePollIcon) return dialog } @@ -143,7 +143,7 @@ class PollMainDialogFragment : DialogFragment() { private fun initVotersAmount(showVotersAmount: Boolean, numVoters: Int, showResultSubtitle: Boolean) { if (showVotersAmount) { - viewThemeUtils.colorDialogSupportingText(binding.pollVotesAmount) + viewThemeUtils.dialog.colorDialogSupportingText(binding.pollVotesAmount) binding.pollVotesAmount.visibility = View.VISIBLE binding.pollVotesAmount.text = resources.getQuantityString( R.plurals.polls_amount_voters, @@ -155,7 +155,7 @@ class PollMainDialogFragment : DialogFragment() { } if (showResultSubtitle) { - viewThemeUtils.colorDialogSupportingText(binding.pollResultsSubtitle) + viewThemeUtils.dialog.colorDialogSupportingText(binding.pollResultsSubtitle) binding.pollResultsSubtitle.visibility = View.VISIBLE binding.pollResultsSubtitleSeperator.visibility = View.VISIBLE } else { diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt index 265622fe7..17c040886 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt @@ -132,7 +132,7 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } .setNegativeButton(R.string.nc_cancel, null) - viewThemeUtils.material.colorMaterialAlertDialogBackground( + viewThemeUtils.dialog.colorMaterialAlertDialogBackground( binding.pollResultsEndPollButton.context, dialogBuilder ) diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt index ae8b0347f..5226d188a 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt @@ -215,7 +215,7 @@ class PollVoteFragment : Fragment() { } .setNegativeButton(R.string.nc_cancel, null) - viewThemeUtils.material.colorMaterialAlertDialogBackground( + viewThemeUtils.dialog.colorMaterialAlertDialogBackground( binding.pollVoteEndPollButton.context, dialogBuilder ) diff --git a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt index 8245dc50e..c91ca0ebd 100644 --- a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/activities/RemoteFileBrowserActivity.kt @@ -100,7 +100,7 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe initViewModel(mimeTypeSelectionFilter) binding.swipeRefreshList.setOnRefreshListener(this) - viewThemeUtils.themeSwipeRefreshLayout(binding.swipeRefreshList) + viewThemeUtils.androidx.themeSwipeRefreshLayout(binding.swipeRefreshList) binding.pathNavigationBackButton.setOnClickListener { viewModel.navigateUp() } binding.sortButton.setOnClickListener { changeSorting() } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java index aed0e1cca..dc205feb0 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountDialogFragment.java @@ -217,11 +217,11 @@ public class ChooseAccountDialogFragment extends DialogFragment { viewThemeUtils.platform.themeDialogDivider(binding.divider); viewThemeUtils.material.colorMaterialTextButton(binding.setStatus); - viewThemeUtils.colorDialogMenuText(binding.setStatus); + viewThemeUtils.dialog.colorDialogMenuText(binding.setStatus); viewThemeUtils.material.colorMaterialTextButton(binding.addAccount); - viewThemeUtils.colorDialogMenuText(binding.addAccount); + viewThemeUtils.dialog.colorDialogMenuText(binding.addAccount); viewThemeUtils.material.colorMaterialTextButton(binding.manageSettings); - viewThemeUtils.colorDialogMenuText(binding.manageSettings); + viewThemeUtils.dialog.colorDialogMenuText(binding.manageSettings); } private void loadCurrentStatus(User user) { diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index aec5a651d..5a51b4648 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -167,7 +167,7 @@ class SetStatusDialogFragment : binding = DialogSetStatusBinding.inflate(LayoutInflater.from(context)) val dialogBuilder = MaterialAlertDialogBuilder(binding.root.context).setView(binding.root) - viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) return dialogBuilder.create() } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt index 2487d25ba..41e17df76 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt @@ -21,26 +21,13 @@ package com.nextcloud.talk.ui.theme -import android.content.Context -import android.content.res.ColorStateList -import android.graphics.drawable.Drawable -import android.text.Spannable -import android.text.SpannableString -import android.widget.ImageView -import android.widget.TextView -import androidx.appcompat.content.res.AppCompatResources -import androidx.core.graphics.drawable.DrawableCompat -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout -import com.google.android.material.button.MaterialButton import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase -import com.nextcloud.talk.R import com.nextcloud.talk.ui.theme.viewthemeutils.AndroidViewThemeUtils -import com.nextcloud.talk.ui.theme.viewthemeutils.AppCompatViewThemeUtils +import com.nextcloud.talk.ui.theme.viewthemeutils.AndroidXViewThemeUtils +import com.nextcloud.talk.ui.theme.viewthemeutils.DialogViewThemeUtils import com.nextcloud.talk.ui.theme.viewthemeutils.MaterialViewThemeUtils import com.nextcloud.talk.ui.theme.viewthemeutils.TalkSpecificViewThemeUtils -import com.nextcloud.talk.utils.DisplayUtils -import eu.davidea.flexibleadapter.utils.FlexibleUtils import javax.inject.Inject @Suppress("TooManyFunctions") @@ -51,62 +38,9 @@ class ViewThemeUtils @Inject constructor( @JvmField val material: MaterialViewThemeUtils, @JvmField - val appcompat: AppCompatViewThemeUtils, + val androidx: AndroidXViewThemeUtils, @JvmField - val talk: TalkSpecificViewThemeUtils -) : ViewThemeUtilsBase(schemes) { - - fun themeSwipeRefreshLayout(swipeRefreshLayout: SwipeRefreshLayout) { - withScheme(swipeRefreshLayout) { scheme -> - swipeRefreshLayout.setColorSchemeColors(scheme.primary) - swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.refresh_spinner_background) - } - } - - fun colorDialogMenuText(button: MaterialButton) { - withScheme(button) { scheme -> - button.setTextColor(scheme.onSurface) - button.iconTint = ColorStateList.valueOf(scheme.onSurface) - } - } - - fun colorDialogHeadline(textView: TextView) { - withScheme(textView) { scheme -> - textView.setTextColor(scheme.onSurface) - } - } - - fun colorDialogSupportingText(textView: TextView) { - withScheme(textView) { scheme -> - textView.setTextColor(scheme.onSurfaceVariant) - } - } - - fun colorDialogIcon(icon: ImageView) { - withScheme(icon) { scheme -> - icon.setColorFilter(scheme.secondary) - } - } - - fun highlightText(textView: TextView, originalText: String, constraint: String) { - withScheme(textView) { scheme -> - FlexibleUtils.highlightText(textView, originalText, constraint, scheme.primary) - } - } - - fun createHighlightedSpan(context: Context, messageSpannable: SpannableString, searchTerm: String): Spannable { - var spannable: Spannable = messageSpannable - withScheme(context) { scheme -> - spannable = DisplayUtils.searchAndColor(messageSpannable, searchTerm, scheme.primary) - } - return spannable - } - - fun colorMaterialAlertDialogIcon(context: Context, drawableId: Int): Drawable { - val drawable = AppCompatResources.getDrawable(context, drawableId)!! - withScheme(context) { scheme -> - DrawableCompat.setTint(drawable, scheme.secondary) - } - return drawable - } -} + val talk: TalkSpecificViewThemeUtils, + @JvmField + val dialog: DialogViewThemeUtils +) : ViewThemeUtilsBase(schemes) diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidViewThemeUtils.kt index 1de30a6c9..882e44344 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidViewThemeUtils.kt @@ -44,6 +44,7 @@ import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase import com.nextcloud.talk.R import com.nextcloud.talk.utils.DisplayUtils +import eu.davidea.flexibleadapter.utils.FlexibleUtils import javax.inject.Inject /** @@ -67,15 +68,18 @@ class AndroidViewThemeUtils @Inject constructor(schemes: MaterialSchemes, privat fun themeStatusBar(activity: Activity, view: View) { withScheme(view) { scheme -> + // TODO extract from displayutils to common DisplayUtils.applyColorToStatusBar(activity, scheme.surface) } } fun resetStatusBar(activity: Activity, view: View) { + // TODO extract from displayutils to common DisplayUtils.applyColorToStatusBar( activity, ResourcesCompat.getColor( activity.resources, + // TODO do not use talk.R R.color.bg_default, activity.theme ) @@ -250,6 +254,13 @@ class AndroidViewThemeUtils @Inject constructor(schemes: MaterialSchemes, privat } } + fun highlightText(textView: TextView, originalText: String, constraint: String) { + withScheme(textView) { scheme -> + // TODO do not use FlexibleUtils for this + FlexibleUtils.highlightText(textView, originalText, constraint, scheme.primary) + } + } + companion object { private const val ON_SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.38f } diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidXViewThemeUtils.kt similarity index 84% rename from app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt rename to app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidXViewThemeUtils.kt index 560c2e18f..8bbfaaacd 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AppCompatViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/AndroidXViewThemeUtils.kt @@ -27,16 +27,16 @@ import android.widget.LinearLayout import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SwitchCompat import androidx.core.content.res.ResourcesCompat -import com.nextcloud.android.common.ui.color.ColorUtil +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase import com.nextcloud.talk.R import javax.inject.Inject /** - * View theme utils for AppCompat views (androidx.appcompat.*) + * View theme utils for Android extension views (androidx.*) */ -class AppCompatViewThemeUtils @Inject constructor(schemes: MaterialSchemes, private val colorUtil: ColorUtil) : +class AndroidXViewThemeUtils @Inject constructor(schemes: MaterialSchemes) : ViewThemeUtilsBase(schemes) { fun themeSearchView(searchView: SearchView) { withScheme(searchView) { scheme -> @@ -58,11 +58,13 @@ class AppCompatViewThemeUtils @Inject constructor(schemes: MaterialSchemes, priv val thumbUncheckedColor = ResourcesCompat.getColor( context.resources, + // TODO extract to common R.color.switch_thumb_color_unchecked, context.theme ) val trackUncheckedColor = ResourcesCompat.getColor( context.resources, + // TODO extract to common R.color.switch_track_color_unchecked, context.theme ) @@ -86,6 +88,13 @@ class AppCompatViewThemeUtils @Inject constructor(schemes: MaterialSchemes, priv } } + fun themeSwipeRefreshLayout(swipeRefreshLayout: SwipeRefreshLayout) { + withScheme(swipeRefreshLayout) { scheme -> + swipeRefreshLayout.setColorSchemeColors(scheme.primary) + swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.refresh_spinner_background) + } + } + companion object { private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77 private const val SEARCH_TEXT_SIZE: Float = 16f diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/DialogViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/DialogViewThemeUtils.kt new file mode 100644 index 000000000..9ab1edf9c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/DialogViewThemeUtils.kt @@ -0,0 +1,99 @@ +/* + * Nextcloud Talk application + * + * @author Álvaro Brey + * Copyright (C) 2022 Álvaro Brey + * Copyright (C) 2022 Nextcloud GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.ui.theme.viewthemeutils + +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.drawable.Drawable +import android.os.Build +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.content.res.AppCompatResources +import androidx.core.graphics.drawable.DrawableCompat +import com.google.android.material.R +import com.google.android.material.button.MaterialButton +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.shape.MaterialShapeDrawable +import com.nextcloud.android.common.ui.theme.MaterialSchemes +import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase +import javax.inject.Inject + +/** + * View theme utils for dialogs + */ +class DialogViewThemeUtils @Inject constructor(schemes: MaterialSchemes) : + ViewThemeUtilsBase(schemes) { + + fun colorMaterialAlertDialogBackground(context: Context, dialogBuilder: MaterialAlertDialogBuilder) { + withScheme(dialogBuilder.context) { scheme -> + val materialShapeDrawable = MaterialShapeDrawable( + context, + null, + R.attr.alertDialogStyle, + R.style.MaterialAlertDialog_MaterialComponents + ) + materialShapeDrawable.initializeElevationOverlay(context) + materialShapeDrawable.fillColor = ColorStateList.valueOf(scheme.surface) + + // dialogCornerRadius first appeared in Android Pie + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + val radius = context.resources.getDimension(com.nextcloud.talk.R.dimen.dialogBorderRadius) + materialShapeDrawable.setCornerSize(radius) + } + + dialogBuilder.background = materialShapeDrawable + } + } + + fun colorDialogMenuText(button: MaterialButton) { + withScheme(button) { scheme -> + button.setTextColor(scheme.onSurface) + button.iconTint = ColorStateList.valueOf(scheme.onSurface) + } + } + + fun colorDialogHeadline(textView: TextView) { + withScheme(textView) { scheme -> + textView.setTextColor(scheme.onSurface) + } + } + + fun colorDialogSupportingText(textView: TextView) { + withScheme(textView) { scheme -> + textView.setTextColor(scheme.onSurfaceVariant) + } + } + + fun colorDialogIcon(icon: ImageView) { + withScheme(icon) { scheme -> + icon.setColorFilter(scheme.secondary) + } + } + + fun colorMaterialAlertDialogIcon(context: Context, drawableId: Int): Drawable { + val drawable = AppCompatResources.getDrawable(context, drawableId)!! + withScheme(context) { scheme -> + DrawableCompat.setTint(drawable, scheme.secondary) + } + return drawable + } +} diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.kt index 536e1ebc3..aeece3171 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.kt @@ -21,20 +21,16 @@ package com.nextcloud.talk.ui.theme.viewthemeutils -import android.content.Context import android.content.res.ColorStateList import android.graphics.Color import android.graphics.PorterDuff -import android.os.Build import androidx.core.content.ContextCompat import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.button.MaterialButton import com.google.android.material.card.MaterialCardView import com.google.android.material.chip.Chip -import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.progressindicator.LinearProgressIndicator -import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.tabs.TabLayout import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textview.MaterialTextView @@ -296,27 +292,6 @@ class MaterialViewThemeUtils @Inject constructor(schemes: MaterialSchemes, priva } } - fun colorMaterialAlertDialogBackground(context: Context, dialogBuilder: MaterialAlertDialogBuilder) { - withScheme(dialogBuilder.context) { scheme -> - val materialShapeDrawable = MaterialShapeDrawable( - context, - null, - com.google.android.material.R.attr.alertDialogStyle, - com.google.android.material.R.style.MaterialAlertDialog_MaterialComponents - ) - materialShapeDrawable.initializeElevationOverlay(context) - materialShapeDrawable.fillColor = ColorStateList.valueOf(scheme.surface) - - // dialogCornerRadius first appeared in Android Pie - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - val radius = context.resources.getDimension(com.nextcloud.talk.R.dimen.dialogBorderRadius) - materialShapeDrawable.setCornerSize(radius) - } - - dialogBuilder.background = materialShapeDrawable - } - } - companion object { private const val SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.12f private const val ON_SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.38f diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt index 4d8be52c3..9aa24d3ea 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/TalkSpecificViewThemeUtils.kt @@ -62,7 +62,7 @@ import kotlin.math.roundToInt @Suppress("TooManyFunctions") class TalkSpecificViewThemeUtils @Inject constructor( schemes: MaterialSchemes, - private val appcompat: AppCompatViewThemeUtils + private val appcompat: AndroidXViewThemeUtils ) : ViewThemeUtilsBase(schemes) { fun themeIncomingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java index ab7342090..b91e4e287 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java @@ -96,7 +96,7 @@ public class MagicUserInputModule extends StandardUserInputModule { .setTitle(title) .setView(view); - viewThemeUtils.material.colorMaterialAlertDialogBackground(view.getContext(), dialogBuilder); + viewThemeUtils.dialog.colorMaterialAlertDialogBackground(view.getContext(), dialogBuilder); final Dialog dialog = dialogBuilder.show();