From 1f32b35117a09e841bb6ebc7ade2783eb8f83fdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Brey?= Date: Mon, 29 Aug 2022 17:26:13 +0200 Subject: [PATCH] ViewThemeUtils: split material utilities into a separate class 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 +- .../FullScreenTextViewerActivity.kt | 2 +- .../talk/activities/TakePhotoActivity.java | 4 +- .../talk/adapters/items/ContactItem.java | 2 +- .../talk/adapters/items/ConversationItem.java | 8 +- .../adapters/items/GenericTextHeaderItem.java | 2 +- .../IncomingLocationMessageViewHolder.kt | 2 +- .../messages/IncomingPollMessageViewHolder.kt | 2 +- .../IncomingVoiceMessageViewHolder.kt | 6 +- .../MagicIncomingTextMessageViewHolder.kt | 2 +- .../MagicPreviewMessageViewHolder.java | 4 +- .../OutcomingVoiceMessageViewHolder.kt | 4 +- .../talk/controllers/ChatController.kt | 14 +- .../talk/controllers/ContactsController.kt | 4 +- .../controllers/ConversationInfoController.kt | 15 +- .../ConversationsListController.kt | 32 +- .../talk/controllers/ProfileController.kt | 12 +- .../talk/controllers/SettingsController.kt | 8 +- .../talk/controllers/base/BaseController.kt | 12 +- .../bottomsheet/EntryMenuController.kt | 6 +- .../bottomsheet/OperationsMenuController.kt | 2 +- .../adapters/PollCreateOptionViewHolder.kt | 2 +- .../adapters/PollResultHeaderViewHolder.kt | 2 +- .../talk/polls/ui/PollCreateDialogFragment.kt | 20 +- .../talk/polls/ui/PollLoadingFragment.kt | 2 +- .../talk/polls/ui/PollMainDialogFragment.kt | 2 +- .../talk/polls/ui/PollResultsFragment.kt | 8 +- .../talk/polls/ui/PollVoteFragment.kt | 14 +- .../activities/RemoteFileBrowserActivity.kt | 8 +- .../RemoteFileBrowserItemsListViewHolder.kt | 2 +- .../activities/SharedItemsActivity.kt | 8 +- .../talk/ui/dialog/AttachmentDialog.kt | 2 +- .../talk/ui/dialog/AudioOutputDialog.kt | 18 +- .../dialog/ChooseAccountDialogFragment.java | 12 +- .../talk/ui/dialog/ContactsBottomDialog.kt | 2 +- .../dialog/ConversationsListBottomDialog.kt | 2 +- .../talk/ui/dialog/MessageActionsDialog.kt | 2 +- .../nextcloud/talk/ui/dialog/ScopeDialog.kt | 2 +- .../talk/ui/dialog/SetStatusDialogFragment.kt | 14 +- .../talk/ui/dialog/ShowReactionsDialog.kt | 4 +- .../ui/dialog/SortingOrderDialogFragment.java | 8 +- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 288 +--------------- .../viewthemeutils/MaterialViewThemeUtils.kt | 324 ++++++++++++++++++ .../preferences/MagicUserInputModule.java | 6 +- 44 files changed, 477 insertions(+), 422 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.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 73c59c69f..e6e418f09 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt @@ -128,11 +128,11 @@ open class BaseActivity : AppCompatActivity() { sslErrorHandler?.cancel() } - viewThemeUtils.colorMaterialAlertDialogBackground(context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) diff --git a/app/src/main/java/com/nextcloud/talk/activities/FullScreenTextViewerActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/FullScreenTextViewerActivity.kt index f534517a2..cce904b99 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/FullScreenTextViewerActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/FullScreenTextViewerActivity.kt @@ -104,7 +104,7 @@ class FullScreenTextViewerActivity : AppCompatActivity() { supportActionBar?.title = fileName supportActionBar?.setDisplayHomeAsUpEnabled(true) - viewThemeUtils.androidViewThemeUtils.themeStatusBar(this, binding.textviewToolbar) + viewThemeUtils.platform.themeStatusBar(this, binding.textviewToolbar) if (resources != null) { DisplayUtils.applyColorToNavigationBar( diff --git a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java index 27d9487bb..bb1d93637 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java @@ -105,8 +105,8 @@ public class TakePhotoActivity extends AppCompatActivity { setContentView(binding.getRoot()); - viewThemeUtils.themeFAB(binding.takePhoto); - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.send); + viewThemeUtils.material.themeFAB(binding.takePhoto); + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.send); cameraProviderFuture = ProcessCameraProvider.getInstance(this); cameraProviderFuture.addListener(() -> { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java index fa5e21a91..8980463e7 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java @@ -113,7 +113,7 @@ public class ContactItem extends AbstractFlexibleItem(R.id.cancelReplyButton)) cancelNotificationsForCurrentConversation() @@ -2524,12 +2524,12 @@ class ChatController(args: Bundle) : super.onCreateOptionsMenu(menu, inflater) inflater.inflate(R.menu.menu_conversation, menu) - viewThemeUtils.androidViewThemeUtils.colorToolbarMenuIcon( + viewThemeUtils.platform.colorToolbarMenuIcon( binding.messageInputView.context, menu.findItem(R.id.conversation_voice_call) ) - viewThemeUtils.androidViewThemeUtils.colorToolbarMenuIcon( + viewThemeUtils.platform.colorToolbarMenuIcon( binding.messageInputView.context, menu.findItem(R.id.conversation_video_call) ) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt index a45841619..5baa2efef 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt @@ -380,7 +380,7 @@ class ContactsController(args: Bundle) : super.onPrepareOptionsMenu(menu) if (searchItem != null) { - viewThemeUtils.androidViewThemeUtils.colorToolbarMenuIcon( + viewThemeUtils.platform.colorToolbarMenuIcon( binding.titleTextView.context, searchItem!! ) @@ -638,7 +638,7 @@ class ContactsController(args: Bundle) : PorterDuff.Mode.SRC_IN ) - viewThemeUtils.androidViewThemeUtils.colorImageViewButton(binding.conversationPrivacyToggle.publicCallLink) + viewThemeUtils.platform.colorImageViewButton(binding.conversationPrivacyToggle.publicCallLink) disengageProgressBar() } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt index be493a22c..5e7c7f82a 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt @@ -227,7 +227,7 @@ class ConversationInfoController(args: Bundle) : binding.addParticipantsAction.visibility = View.GONE - viewThemeUtils.androidViewThemeUtils.colorCircularProgressBar(binding.progressBar) + viewThemeUtils.platform.colorCircularProgressBar(binding.progressBar) } private fun setupWebinaryView() { @@ -374,9 +374,10 @@ class ConversationInfoController(args: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> // unused atm } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) + viewThemeUtils.material + .colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -545,9 +546,10 @@ class ConversationInfoController(args: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> // unused atm } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) + viewThemeUtils.material + .colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -765,7 +767,8 @@ class ConversationInfoController(args: Bundle) : DisplayUtils.getImageRequestForUrl( ApiUtils.getUrlForAvatar( conversationUser!!.baseUrl, - conversation!!.name, true + conversation!!.name, + true ), conversationUser ) 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 7b0590c7f..949e0e946 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.kt @@ -274,7 +274,8 @@ class ConversationsListController(bundle: Bundle) : credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) if (activity != null && activity is MainActivity) { loadUserAvatar((activity as MainActivity?)!!.binding.switchAccountButton) - viewThemeUtils.colorMaterialTextButton((activity as MainActivity?)!!.binding.switchAccountButton) + viewThemeUtils.material + .colorMaterialTextButton((activity as MainActivity?)!!.binding.switchAccountButton) } fetchData() } @@ -353,14 +354,14 @@ class ConversationsListController(bundle: Bundle) : } activity.binding.searchText.setOnClickListener { showSearchView(activity, searchView, searchItem) - viewThemeUtils.androidViewThemeUtils.themeStatusBar(activity, searchView!!) + viewThemeUtils.platform.themeStatusBar(activity, searchView!!) } } searchView!!.setOnCloseListener { if (TextUtils.isEmpty(searchView!!.query.toString())) { searchView!!.onActionViewCollapsed() if (activity != null) { - viewThemeUtils.androidViewThemeUtils.resetStatusBar(activity, searchView!!) + viewThemeUtils.platform.resetStatusBar(activity, searchView!!) } } else { searchView!!.post { searchView!!.setQuery(TAG, true) } @@ -400,7 +401,7 @@ class ConversationsListController(bundle: Bundle) : mainActivity.binding.toolbar.visibility = View.GONE mainActivity.binding.searchToolbar.visibility = View.VISIBLE if (resources != null) { - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform .resetStatusBar(mainActivity, mainActivity.binding.searchToolbar) } } @@ -671,7 +672,7 @@ class ConversationsListController(bundle: Bundle) : run(context) showNewConversationsScreen() } - viewThemeUtils.themeFAB(binding.floatingActionButton) + viewThemeUtils.material.themeFAB(binding.floatingActionButton) if (activity != null && activity is MainActivity) { val activity = activity as MainActivity? activity!!.binding.switchAccountButton.setOnClickListener { @@ -696,7 +697,7 @@ class ConversationsListController(bundle: Bundle) : nextUnreadConversationScrollPosition ) } - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.newMentionPopupBubble) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.newMentionPopupBubble) } @Suppress("Detekt.TooGenericExceptionCaught") @@ -949,9 +950,10 @@ class ConversationsListController(bundle: Bundle) : Log.d(TAG, "sharing files aborted, going back to share-to screen") showShareToScreen = true } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) + viewThemeUtils.material + .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -1145,9 +1147,10 @@ class ConversationsListController(bundle: Bundle) : .setNegativeButton(R.string.nc_cancel) { _, _ -> conversationMenuBundle = null } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) + viewThemeUtils.material + .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -1188,9 +1191,10 @@ class ConversationsListController(bundle: Bundle) : .popChangeHandler(VerticalChangeHandler()) ) } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) + viewThemeUtils.material + .colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -1230,9 +1234,9 @@ class ConversationsListController(bundle: Bundle) : activity!!.finish() } } - viewThemeUtils.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.floatingActionButton.context, dialogBuilder) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt index a6ed67903..717e01a9b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt @@ -261,10 +261,10 @@ class ProfileController : BaseController(R.layout.controller_profile) { } private fun colorIcons() { - viewThemeUtils.themeFAB(binding.avatarChoose) - viewThemeUtils.themeFAB(binding.avatarCamera) - viewThemeUtils.themeFAB(binding.avatarUpload) - viewThemeUtils.themeFAB(binding.avatarDelete) + viewThemeUtils.material.themeFAB(binding.avatarChoose) + viewThemeUtils.material.themeFAB(binding.avatarCamera) + viewThemeUtils.material.themeFAB(binding.avatarUpload) + viewThemeUtils.material.themeFAB(binding.avatarDelete) } private fun isAllEmpty(items: Array): Boolean { @@ -755,10 +755,10 @@ class ProfileController : BaseController(R.layout.controller_profile) { initUserInfoEditText(holder, item) holder.binding.icon.contentDescription = item.hint - viewThemeUtils.androidViewThemeUtils.colorImageView(holder.binding.icon) + viewThemeUtils.platform.colorImageView(holder.binding.icon) if (!TextUtils.isEmpty(item.text) || controller.edit) { holder.binding.userInfoDetailContainer.visibility = View.VISIBLE - controller.viewThemeUtils.colorTextInputLayout(holder.binding.userInfoInputLayout) + controller.viewThemeUtils.material.colorTextInputLayout(holder.binding.userInfoInputLayout) if (controller.edit && controller.editableFields.contains(item.field.toString().lowercase()) ) { 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 8a1a852f7..96e00af26 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -385,14 +385,14 @@ class SettingsController : BaseController(R.layout.controller_settings) { // unused atm } - viewThemeUtils.colorMaterialAlertDialogBackground( + viewThemeUtils.material.colorMaterialAlertDialogBackground( binding.messageText.context, materialAlertDialogBuilder ) val dialog = materialAlertDialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) @@ -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.colorMaterialAlertDialogBackground(phoneNumberInputLayout.context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(phoneNumberInputLayout.context, dialogBuilder) val dialog = dialogBuilder.create() dialog.setOnShowListener(object : OnShowListener { @@ -968,7 +968,7 @@ class SettingsController : BaseController(R.layout.controller_settings) { dialog.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt index 67d7de12b..fe0258f21 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt @@ -123,9 +123,9 @@ abstract class BaseController(@LayoutRes var layoutRes: Int, args: Bundle? = nul if (getActivity() != null && getActivity() is MainActivity) { activity = getActivity() as MainActivity? - viewThemeUtils.themeCardView(activity!!.binding.searchToolbar) - viewThemeUtils.themeToolbar(activity.binding.toolbar) - viewThemeUtils.themeSearchBarText(activity.binding.searchText) + viewThemeUtils.material.themeCardView(activity!!.binding.searchToolbar) + viewThemeUtils.material.themeToolbar(activity.binding.toolbar) + viewThemeUtils.material.themeSearchBarText(activity.binding.searchText) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.isKeyboardIncognito) { @@ -188,7 +188,7 @@ abstract class BaseController(@LayoutRes var layoutRes: Int, args: Bundle? = nul val layoutParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams binding.searchToolbar.visibility = View.GONE binding.toolbar.visibility = View.VISIBLE - viewThemeUtils.colorToolbarOverflowIcon(binding.toolbar) + viewThemeUtils.material.colorToolbarOverflowIcon(binding.toolbar) layoutParams.scrollFlags = 0 binding.appBar.stateListAnimator = AnimatorInflater.loadStateListAnimator( binding.appBar.context, @@ -217,9 +217,9 @@ abstract class BaseController(@LayoutRes var layoutRes: Int, args: Bundle? = nul private fun colorizeStatusBar(showSearchBar: Boolean, activity: Activity?, resources: Resources?) { if (activity != null && resources != null) { if (showSearchBar) { - view?.let { viewThemeUtils.androidViewThemeUtils.resetStatusBar(activity, it) } + view?.let { viewThemeUtils.platform.resetStatusBar(activity, it) } } else { - view?.let { viewThemeUtils.androidViewThemeUtils.themeStatusBar(activity, it) } + view?.let { viewThemeUtils.platform.themeStatusBar(activity, it) } } } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt index 2bdaf70ca..fc5d193ef 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt @@ -126,7 +126,7 @@ class EntryMenuController(args: Bundle) : rootView = view, editText = binding.textEdit, onEmojiPopupShownListener = { - viewThemeUtils.androidViewThemeUtils.colorImageView(binding.smileyButton) + viewThemeUtils.platform.colorImageView(binding.smileyButton) }, onEmojiPopupDismissListener = { binding.smileyButton.imageTintList = ColorStateList.valueOf( @@ -166,8 +166,8 @@ class EntryMenuController(args: Bundle) : binding.textInputLayout.endIconMode = TextInputLayout.END_ICON_NONE } - viewThemeUtils.colorTextInputLayout(binding.textInputLayout) - viewThemeUtils.colorMaterialButtonText(binding.okButton) + viewThemeUtils.material.colorTextInputLayout(binding.textInputLayout) + viewThemeUtils.material.colorMaterialButtonText(binding.okButton) binding.textInputLayout.hint = labelText binding.textInputLayout.requestFocus() diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt index e313bd4c8..5482be9fd 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt @@ -117,7 +117,7 @@ class OperationsMenuController(args: Bundle) : BaseController( sharedApplication!!.componentApplication.inject(this) currentUser = userManager.currentUser.blockingGet() - viewThemeUtils.androidViewThemeUtils.colorCircularProgressBar(binding.progressBar) + viewThemeUtils.platform.colorCircularProgressBar(binding.progressBar) if (!TextUtils.isEmpty(callUrl) && callUrl.contains("/call")) { conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1) diff --git a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollCreateOptionViewHolder.kt b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollCreateOptionViewHolder.kt index f970d0f68..5fcf66926 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/adapters/PollCreateOptionViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/adapters/PollCreateOptionViewHolder.kt @@ -50,7 +50,7 @@ class PollCreateOptionViewHolder( } binding.pollOptionTextEdit.setText(pollCreateOptionItem.pollOption) - viewThemeUtils.colorTextInputLayout(binding.pollOptionTextInputLayout) + viewThemeUtils.material.colorTextInputLayout(binding.pollOptionTextInputLayout) if (focus) { itemsListener.requestFocus(binding.pollOptionTextEdit) 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 3595471ca..0f46fc298 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 @@ -34,7 +34,7 @@ class PollResultHeaderViewHolder( override fun bind(pollResultItem: PollResultItem, clickListener: PollResultItemClickListener) { val item = pollResultItem as PollResultHeaderItem - viewThemeUtils.colorProgressBar(binding.pollOptionBar) + viewThemeUtils.material.colorProgressBar(binding.pollOptionBar) binding.root.setOnClickListener { clickListener.onClick() } 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 e9e644448..c583b5109 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.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) return dialogBuilder.create() } @@ -101,18 +101,18 @@ class PollCreateDialogFragment : DialogFragment(), PollCreateOptionsItemListener } private fun themeDialog() { - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement(binding.pollQuestion) - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement(binding.pollOptions) - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement(binding.pollSettings) + viewThemeUtils.platform.colorPrimaryTextViewElement(binding.pollQuestion) + viewThemeUtils.platform.colorPrimaryTextViewElement(binding.pollOptions) + viewThemeUtils.platform.colorPrimaryTextViewElement(binding.pollSettings) - viewThemeUtils.colorTextInputLayout(binding.pollCreateQuestionTextInputLayout) + viewThemeUtils.material.colorTextInputLayout(binding.pollCreateQuestionTextInputLayout) - viewThemeUtils.colorMaterialButtonText(binding.pollAddOptionsItem) - viewThemeUtils.colorMaterialButtonText(binding.pollDismiss) - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.pollCreateButton) + viewThemeUtils.material.colorMaterialButtonText(binding.pollAddOptionsItem) + viewThemeUtils.material.colorMaterialButtonText(binding.pollDismiss) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.pollCreateButton) - viewThemeUtils.androidViewThemeUtils.themeCheckbox(binding.pollPrivatePollCheckbox) - viewThemeUtils.androidViewThemeUtils.themeCheckbox(binding.pollMultipleAnswersCheckbox) + viewThemeUtils.platform.themeCheckbox(binding.pollPrivatePollCheckbox) + viewThemeUtils.platform.themeCheckbox(binding.pollMultipleAnswersCheckbox) } private fun setupListeners() { diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt index c80154777..6eb95a1f0 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollLoadingFragment.kt @@ -55,7 +55,7 @@ class PollLoadingFragment : Fragment() { ): View { binding = DialogPollLoadingBinding.inflate(inflater, container, false) binding.root.layoutParams.height = fragmentHeight - viewThemeUtils.androidViewThemeUtils.colorCircularProgressBar(binding.pollLoadingProgressbar) + viewThemeUtils.platform.colorCircularProgressBar(binding.pollLoadingProgressbar) return binding.root } 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 fe5fb3268..179d778a5 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,7 +72,7 @@ class PollMainDialogFragment : DialogFragment() { val dialogBuilder = MaterialAlertDialogBuilder(binding.root.context).setView(binding.root) - viewThemeUtils.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) val dialog = dialogBuilder.create() 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 670e45e12..265622fe7 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 @@ -99,8 +99,8 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } private fun themeDialog() { - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.editVoteButton) - viewThemeUtils.colorMaterialButtonPrimaryBorderless(binding.pollResultsEndPollButton) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.editVoteButton) + viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(binding.pollResultsEndPollButton) } private fun initAdapter() { @@ -132,14 +132,14 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } .setNegativeButton(R.string.nc_cancel, null) - viewThemeUtils.colorMaterialAlertDialogBackground( + viewThemeUtils.material.colorMaterialAlertDialogBackground( binding.pollResultsEndPollButton.context, dialogBuilder ) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) 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 453a660ec..ae8b0347f 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 @@ -127,9 +127,9 @@ class PollVoteFragment : Fragment() { } private fun themeDialog() { - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.pollVoteSubmitButton) - viewThemeUtils.colorMaterialButtonText(binding.pollVoteEndPollButton) - viewThemeUtils.colorMaterialButtonPrimaryOutlined(binding.pollVoteEditDismiss) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.pollVoteSubmitButton) + viewThemeUtils.material.colorMaterialButtonText(binding.pollVoteEndPollButton) + viewThemeUtils.material.colorMaterialButtonPrimaryOutlined(binding.pollVoteEditDismiss) } private fun updateDismissEditButton(showDismissEditButton: Boolean) { @@ -149,7 +149,7 @@ class PollVoteFragment : Fragment() { RadioButton(context).apply { text = option } }?.forEachIndexed { index, radioButton -> radioButton.id = index - viewThemeUtils.androidViewThemeUtils.themeRadioButton(radioButton) + viewThemeUtils.platform.themeRadioButton(radioButton) makeOptionBoldIfSelfVoted(radioButton, poll, index) binding.pollVoteRadioGroup.addView(radioButton) @@ -170,7 +170,7 @@ class PollVoteFragment : Fragment() { setLayoutParams(layoutParams) } }?.forEachIndexed { index, checkBox -> - viewThemeUtils.androidViewThemeUtils.themeCheckbox(checkBox) + viewThemeUtils.platform.themeCheckbox(checkBox) checkBox.id = index makeOptionBoldIfSelfVoted(checkBox, poll, index) binding.voteOptionsCheckboxesWrapper.addView(checkBox) @@ -215,14 +215,14 @@ class PollVoteFragment : Fragment() { } .setNegativeButton(R.string.nc_cancel, null) - viewThemeUtils.colorMaterialAlertDialogBackground( + viewThemeUtils.material.colorMaterialAlertDialogBackground( binding.pollVoteEndPollButton.context, dialogBuilder ) val dialog = dialogBuilder.show() - viewThemeUtils.androidViewThemeUtils.colorTextButtons( + viewThemeUtils.platform.colorTextButtons( dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) 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 aa483410d..8245dc50e 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 @@ -75,16 +75,16 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe binding = ActivityRemoteFileBrowserBinding.inflate(layoutInflater) setSupportActionBar(binding.remoteFileBrowserItemsToolbar) - viewThemeUtils.themeToolbar(binding.remoteFileBrowserItemsToolbar) + viewThemeUtils.material.themeToolbar(binding.remoteFileBrowserItemsToolbar) val scheme = viewThemeUtils.getScheme(binding.sortListButtonGroup.context) binding.sortListButtonGroup.setBackgroundColor(scheme.surface) binding.sortButton.iconTint = ColorStateList.valueOf(scheme.onSurface) binding.sortButton.setTextColor(scheme.onSurface) - viewThemeUtils.colorMaterialTextButton(binding.sortButton) + viewThemeUtils.material.colorMaterialTextButton(binding.sortButton) binding.pathNavigationBackButton.iconTint = ColorStateList.valueOf(scheme.onSurface) binding.pathNavigationBackButton.setTextColor(scheme.onSurface) - viewThemeUtils.colorMaterialTextButton(binding.pathNavigationBackButton) - viewThemeUtils.androidViewThemeUtils.themeStatusBar(this, binding.remoteFileBrowserItemsToolbar) + viewThemeUtils.material.colorMaterialTextButton(binding.pathNavigationBackButton) + viewThemeUtils.platform.themeStatusBar(this, binding.remoteFileBrowserItemsToolbar) setContentView(binding.root) DisplayUtils.applyColorToNavigationBar( diff --git a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt index 64def2e63..631e1c601 100644 --- a/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/remotefilebrowser/adapters/RemoteFileBrowserItemsListViewHolder.kt @@ -129,7 +129,7 @@ class RemoteFileBrowserItemsListViewHolder( private fun setSelectability() { if (selectable) { binding.selectFileCheckbox.visibility = View.VISIBLE - viewThemeUtils.androidViewThemeUtils.themeCheckbox(binding.selectFileCheckbox) + viewThemeUtils.platform.themeCheckbox(binding.selectFileCheckbox) } else { binding.selectFileCheckbox.visibility = View.GONE } diff --git a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt index da5852bf4..9f4ebf994 100644 --- a/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/shareditems/activities/SharedItemsActivity.kt @@ -73,9 +73,9 @@ class SharedItemsActivity : AppCompatActivity() { setSupportActionBar(binding.sharedItemsToolbar) setContentView(binding.root) - viewThemeUtils.androidViewThemeUtils.themeStatusBar(this, binding.sharedItemsToolbar) - viewThemeUtils.themeToolbar(binding.sharedItemsToolbar) - viewThemeUtils.themeTabLayoutOnSurface(binding.sharedItemsTabs) + viewThemeUtils.platform.themeStatusBar(this, binding.sharedItemsToolbar) + viewThemeUtils.material.themeToolbar(binding.sharedItemsToolbar) + viewThemeUtils.material.themeTabLayoutOnSurface(binding.sharedItemsTabs) DisplayUtils.applyColorToNavigationBar( this.window, @@ -146,7 +146,7 @@ class SharedItemsActivity : AppCompatActivity() { else -> {} } - viewThemeUtils.themeTabLayoutOnSurface(binding.sharedItemsTabs) + viewThemeUtils.material.themeTabLayoutOnSurface(binding.sharedItemsTabs) } private fun clearEmptyLoading() { diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt index 636f5dc3f..15c594ecc 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/AttachmentDialog.kt @@ -53,7 +53,7 @@ class AttachmentDialog(val activity: Activity, var chatController: ChatControlle setContentView(dialogAttachmentBinding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(dialogAttachmentBinding.root) + viewThemeUtils.platform.themeDialog(dialogAttachmentBinding.root) initItemsStrings() initItemsVisibility() initItemsClickListeners() diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt index e4702d466..8833fd2a6 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/AudioOutputDialog.kt @@ -51,7 +51,7 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call setContentView(dialogAudioOutputBinding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialogDark(dialogAudioOutputBinding.root) + viewThemeUtils.platform.themeDialogDark(dialogAudioOutputBinding.root) updateOutputDeviceList() initClickListeners() } @@ -92,27 +92,27 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call private fun highlightActiveOutputChannel() { when (callActivity.audioManager?.currentAudioDevice) { WebRtcAudioManager.AudioDevice.BLUETOOTH -> { - viewThemeUtils.androidViewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputBluetoothIcon) - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform.colorImageView(dialogAudioOutputBinding.audioOutputBluetoothIcon) + viewThemeUtils.platform .colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputBluetoothText) } WebRtcAudioManager.AudioDevice.SPEAKER_PHONE -> { - viewThemeUtils.androidViewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputSpeakerIcon) - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform.colorImageView(dialogAudioOutputBinding.audioOutputSpeakerIcon) + viewThemeUtils.platform .colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputSpeakerText) } WebRtcAudioManager.AudioDevice.EARPIECE -> { - viewThemeUtils.androidViewThemeUtils.colorImageView(dialogAudioOutputBinding.audioOutputEarspeakerIcon) - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform.colorImageView(dialogAudioOutputBinding.audioOutputEarspeakerIcon) + viewThemeUtils.platform .colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputEarspeakerText) } WebRtcAudioManager.AudioDevice.WIRED_HEADSET -> { - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform .colorImageView(dialogAudioOutputBinding.audioOutputWiredHeadsetIcon) - viewThemeUtils.androidViewThemeUtils + viewThemeUtils.platform .colorPrimaryTextViewElementDarkMode(dialogAudioOutputBinding.audioOutputWiredHeadsetText) } 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 d1a8822d5..aed0e1cca 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 @@ -129,7 +129,7 @@ public class ChooseAccountDialogFragment extends DialogFragment { binding.currentAccount.ticker.setVisibility(View.GONE); binding.currentAccount.account.setText((Uri.parse(user.getBaseUrl()).getHost())); - viewThemeUtils.androidViewThemeUtils.colorImageView(binding.currentAccount.accountMenu); + viewThemeUtils.platform.colorImageView(binding.currentAccount.accountMenu); if (user.getBaseUrl() != null && @@ -213,14 +213,14 @@ public class ChooseAccountDialogFragment extends DialogFragment { } private void themeViews() { - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.getRoot()); - viewThemeUtils.androidViewThemeUtils.themeDialogDivider(binding.divider); + viewThemeUtils.platform.themeDialog(binding.getRoot()); + viewThemeUtils.platform.themeDialogDivider(binding.divider); - viewThemeUtils.colorMaterialTextButton(binding.setStatus); + viewThemeUtils.material.colorMaterialTextButton(binding.setStatus); viewThemeUtils.colorDialogMenuText(binding.setStatus); - viewThemeUtils.colorMaterialTextButton(binding.addAccount); + viewThemeUtils.material.colorMaterialTextButton(binding.addAccount); viewThemeUtils.colorDialogMenuText(binding.addAccount); - viewThemeUtils.colorMaterialTextButton(binding.manageSettings); + viewThemeUtils.material.colorMaterialTextButton(binding.manageSettings); viewThemeUtils.colorDialogMenuText(binding.manageSettings); } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ContactsBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ContactsBottomDialog.kt index ab425fcf9..0e94c877c 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ContactsBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ContactsBottomDialog.kt @@ -59,7 +59,7 @@ class ContactsBottomDialog( setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.root) + viewThemeUtils.platform.themeDialog(binding.root) executeEntryMenuController(bundle) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt index 0538a3c15..664938911 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt @@ -97,7 +97,7 @@ class ConversationsListBottomDialog( setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.root) + viewThemeUtils.platform.themeDialog(binding.root) initHeaderDescription() initItemsVisibility() initClickListeners() diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt index a2af7d565..c349fedb8 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt @@ -83,7 +83,7 @@ class MessageActionsDialog( setContentView(dialogMessageActionsBinding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(dialogMessageActionsBinding.root) + viewThemeUtils.platform.themeDialog(dialogMessageActionsBinding.root) initEmojiBar(hasChatPermission) initMenuItemCopy(!message.isDeleted) initMenuReplyToMessage(message.replyable && hasChatPermission) diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ScopeDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ScopeDialog.kt index e97810a2e..aefdb09bf 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ScopeDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ScopeDialog.kt @@ -59,7 +59,7 @@ class ScopeDialog( window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(dialogScopeBinding.root) + viewThemeUtils.platform.themeDialog(dialogScopeBinding.root) if (field == ProfileController.Field.DISPLAYNAME || field == ProfileController.Field.EMAIL) { dialogScopeBinding.scopePrivate.visibility = View.GONE 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 23a3eee27..aec5a651d 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.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) + viewThemeUtils.material.colorMaterialAlertDialogBackground(binding.root.context, dialogBuilder) return dialogBuilder.create() } @@ -242,12 +242,12 @@ class SetStatusDialogFragment : } } - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.root) + viewThemeUtils.platform.themeDialog(binding.root) - viewThemeUtils.colorMaterialButtonText(binding.clearStatus) - viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.setStatus) + viewThemeUtils.material.colorMaterialButtonText(binding.clearStatus) + viewThemeUtils.material.colorMaterialButtonPrimaryFilled(binding.setStatus) - viewThemeUtils.colorTextInputLayout(binding.customStatusInputContainer) + viewThemeUtils.material.colorTextInputLayout(binding.customStatusInputContainer) binding.customStatusInput.doAfterTextChanged { text -> binding.setStatus.isEnabled = !text.isNullOrEmpty() @@ -418,8 +418,8 @@ class SetStatusDialogFragment : return } } - viewThemeUtils.colorCardViewBackground(views.first) - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement(views.second) + viewThemeUtils.material.colorCardViewBackground(views.first) + viewThemeUtils.platform.colorPrimaryTextViewElement(views.second) } private fun clearTopStatus() { diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt index 38bcd4d92..a8f71014e 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ShowReactionsDialog.kt @@ -86,7 +86,7 @@ class ShowReactionsDialog( binding = DialogMessageReactionsBinding.inflate(layoutInflater) setContentView(binding.root) window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.root) + viewThemeUtils.platform.themeDialog(binding.root) adapter = ReactionsAdapter(this, user) binding.reactionsList.adapter = adapter binding.reactionsList.layoutManager = LinearLayoutManager(context) @@ -144,7 +144,7 @@ class ShowReactionsDialog( } }) - viewThemeUtils.themeTabLayoutOnSurface(binding.emojiReactionsTabs) + viewThemeUtils.material.themeTabLayoutOnSurface(binding.emojiReactionsTabs) updateParticipantsForEmoji(chatMessage, tagAll) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SortingOrderDialogFragment.java b/app/src/main/java/com/nextcloud/talk/ui/dialog/SortingOrderDialogFragment.java index 8fb5bdb09..5bd21b2ef 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SortingOrderDialogFragment.java +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SortingOrderDialogFragment.java @@ -120,8 +120,8 @@ public class SortingOrderDialogFragment extends DialogFragment implements View.O * find all relevant UI elements and set their values. */ private void setupDialogElements() { - viewThemeUtils.androidViewThemeUtils.themeDialog(binding.root); - viewThemeUtils.colorMaterialButtonPrimaryBorderless(binding.cancel); + viewThemeUtils.platform.themeDialog(binding.root); + viewThemeUtils.material.colorMaterialButtonPrimaryBorderless(binding.cancel); taggedViews = new View[12]; taggedViews[0] = binding.sortByNameAscending; @@ -163,10 +163,10 @@ public class SortingOrderDialogFragment extends DialogFragment implements View.O continue; } if (view instanceof MaterialButton) { - viewThemeUtils.colorMaterialButtonText((MaterialButton) view); + viewThemeUtils.material.colorMaterialButtonText((MaterialButton) view); } if (view instanceof TextView) { - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement((TextView) view); + viewThemeUtils.platform.colorPrimaryTextViewElement((TextView) view); ((TextView) view).setTypeface(Typeface.DEFAULT_BOLD); } } 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 998a86991..5c45fa47c 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 @@ -25,7 +25,6 @@ import android.annotation.TargetApi import android.content.Context import android.content.res.ColorStateList import android.graphics.Color -import android.graphics.PorterDuff import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Build @@ -48,47 +47,31 @@ import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.ViewCompat import androidx.core.view.children import androidx.swiperefreshlayout.widget.SwipeRefreshLayout -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.chip.ChipDrawable -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 -import com.nextcloud.android.common.ui.color.ColorUtil 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.MaterialViewThemeUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DrawableUtils import com.vanniktech.emoji.EmojiTextView import com.yarolegovich.mp.MaterialPreferenceCategory import com.yarolegovich.mp.MaterialSwitchPreference import eu.davidea.flexibleadapter.utils.FlexibleUtils -import scheme.Scheme import javax.inject.Inject import kotlin.math.roundToInt @Suppress("TooManyFunctions") class ViewThemeUtils @Inject constructor( schemes: MaterialSchemes, - private val colorUtil: ColorUtil, @JvmField - val androidViewThemeUtils: AndroidViewThemeUtils -) : - ViewThemeUtilsBase(schemes) { - - fun colorToolbarOverflowIcon(toolbar: MaterialToolbar) { - withScheme(toolbar) { scheme -> - toolbar.overflowIcon?.setColorFilter(scheme.onSurface, PorterDuff.Mode.SRC_ATOP) - } - } + val platform: AndroidViewThemeUtils, + @JvmField + val material: MaterialViewThemeUtils +) : ViewThemeUtilsBase(schemes) { fun themeSearchView(searchView: SearchView) { withScheme(searchView) { scheme -> @@ -103,148 +86,6 @@ class ViewThemeUtils @Inject constructor( } } - fun themeSearchBarText(searchText: MaterialTextView) { - withScheme(searchText) { scheme -> - searchText.setHintTextColor(scheme.onSurfaceVariant) - } - } - - fun themeFAB(fab: FloatingActionButton) { - withScheme(fab) { scheme -> - fab.backgroundTintList = ColorStateList.valueOf(scheme.primaryContainer) - fab.imageTintList = ColorStateList.valueOf(scheme.onPrimaryContainer) - } - } - - fun themeCardView(cardView: MaterialCardView) { - withScheme(cardView) { scheme -> - cardView.backgroundTintList = ColorStateList.valueOf(scheme.surface) - } - } - - fun colorMaterialTextButton(button: MaterialButton) { - withScheme(button) { scheme -> - button.rippleColor = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_pressed) - ), - intArrayOf( - colorUtil.adjustOpacity(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - } - } - - fun colorMaterialButtonText(button: MaterialButton) { - withScheme(button) { scheme -> - val disabledColor = ContextCompat.getColor(button.context, R.color.disabled_text) - val colorStateList = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf(scheme.primary, disabledColor) - ) - button.setTextColor(colorStateList) - button.iconTint = colorStateList - } - } - - fun colorMaterialButtonPrimaryFilled(button: MaterialButton) { - withScheme(button) { scheme -> - button.backgroundTintList = - ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.primary, - colorUtil.adjustOpacity(scheme.onSurface, SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - - button.setTextColor( - ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.onPrimary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - ) - - button.iconTint = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.onPrimary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - } - } - - fun colorMaterialButtonPrimaryOutlined(button: MaterialButton) { - withScheme(button) { scheme -> - button.strokeColor = ColorStateList.valueOf(scheme.outline) - button.setTextColor( - ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.primary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - ) - button.iconTint = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.primary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - } - } - - fun colorMaterialButtonPrimaryBorderless(button: MaterialButton) { - withScheme(button) { scheme -> - button.setTextColor( - ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.primary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - ) - button.iconTint = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_enabled), - intArrayOf(-android.R.attr.state_enabled) - ), - intArrayOf( - scheme.primary, - colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - } - } - fun themeIncomingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { val resources = bubble.resources @@ -268,14 +109,6 @@ class ViewThemeUtils @Inject constructor( ViewCompat.setBackground(bubble, bubbleDrawable) } - fun themeToolbar(toolbar: MaterialToolbar) { - withScheme(toolbar) { scheme -> - toolbar.setBackgroundColor(scheme.surface) - toolbar.setNavigationIconTint(scheme.onSurface) - toolbar.setTitleTextColor(scheme.onSurface) - } - } - fun themeOutgoingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { withScheme(bubble) { scheme -> val bgBubbleColor = if (deleted) { @@ -317,12 +150,6 @@ class ViewThemeUtils @Inject constructor( } } - fun colorCardViewBackground(card: MaterialCardView) { - withScheme(card) { scheme -> - card.setCardBackgroundColor(scheme.surfaceVariant) - } - } - fun colorContactChatItemName(contactName: androidx.emoji.widget.EmojiTextView) { withScheme(contactName) { scheme -> contactName.setTextColor(scheme.onPrimaryContainer) @@ -393,71 +220,6 @@ class ViewThemeUtils @Inject constructor( } } - fun colorProgressBar(progressIndicator: LinearProgressIndicator) { - withScheme(progressIndicator) { scheme -> - progressIndicator.setIndicatorColor(scheme.primary) - } - } - - fun colorTextInputLayout(textInputLayout: TextInputLayout) { - withScheme(textInputLayout) { scheme -> - val errorColor = scheme.onSurfaceVariant - - val errorColorStateList = ColorStateList( - arrayOf( - intArrayOf(-android.R.attr.state_focused), - intArrayOf(android.R.attr.state_focused) - ), - intArrayOf( - errorColor, - errorColor - ) - ) - val coloredColorStateList = ColorStateList( - arrayOf( - intArrayOf(-android.R.attr.state_focused), - intArrayOf(android.R.attr.state_focused) - ), - intArrayOf( - scheme.outline, - scheme.primary - ) - ) - - textInputLayout.setBoxStrokeColorStateList(coloredColorStateList) - textInputLayout.setErrorIconTintList(errorColorStateList) - textInputLayout.setErrorTextColor(errorColorStateList) - textInputLayout.boxStrokeErrorColor = errorColorStateList - textInputLayout.defaultHintTextColor = coloredColorStateList - } - } - - fun themeTabLayoutOnSurface(tabLayout: TabLayout) { - withScheme(tabLayout) { scheme -> - tabLayout.setBackgroundColor(scheme.surface) - colorTabLayout(tabLayout, scheme) - } - } - - fun colorTabLayout(tabLayout: TabLayout, scheme: Scheme) { - tabLayout.setSelectedTabIndicatorColor(scheme.primary) - tabLayout.tabTextColors = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_selected), - intArrayOf(-android.R.attr.state_selected) - ), - intArrayOf(scheme.primary, ContextCompat.getColor(tabLayout.context, R.color.high_emphasis_text)) - ) - tabLayout.tabRippleColor = ColorStateList( - arrayOf( - intArrayOf(android.R.attr.state_pressed) - ), - intArrayOf( - colorUtil.adjustOpacity(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) - ) - ) - } - fun getPlaceholderImage(context: Context, mimetype: String?): Drawable? { val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(mimetype) val drawable = AppCompatResources.getDrawable( @@ -475,22 +237,6 @@ class ViewThemeUtils @Inject constructor( drawable.setTint(scheme.primary) } - fun colorChipBackground(chip: Chip) { - withScheme(chip) { scheme -> - chip.chipBackgroundColor = ColorStateList.valueOf(scheme.primary) - chip.setTextColor(scheme.onPrimary) - } - } - - fun colorChipOutlined(chip: Chip, strokeWidth: Float) { - withScheme(chip) { scheme -> - chip.chipBackgroundColor = ColorStateList.valueOf(Color.TRANSPARENT) - chip.chipStrokeWidth = strokeWidth - chip.chipStrokeColor = ColorStateList.valueOf(scheme.primary) - chip.setTextColor(scheme.primary) - } - } - @TargetApi(Build.VERSION_CODES.O) fun themePlaceholderAvatar(avatar: View, @DrawableRes foreground: Int): Drawable? { var drawable: LayerDrawable? = null @@ -546,27 +292,6 @@ class ViewThemeUtils @Inject constructor( } } - 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(R.dimen.dialogBorderRadius) - materialShapeDrawable.setCornerSize(radius) - } - - dialogBuilder.background = materialShapeDrawable - } - } - fun colorDialogHeadline(textView: TextView) { withScheme(textView) { scheme -> textView.setTextColor(scheme.onSurface) @@ -617,8 +342,7 @@ class ViewThemeUtils @Inject constructor( private const val SWITCH_COMPAT_TRACK_ALPHA: Int = 77 private const val HALF_ALPHA_INT: Int = 255 / 2 - private const val SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.12f - private const val ON_SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.38f + private const val SEARCH_TEXT_SIZE: Float = 16f } } 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 new file mode 100644 index 000000000..536e1ebc3 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/viewthemeutils/MaterialViewThemeUtils.kt @@ -0,0 +1,324 @@ +/* + * 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.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 +import com.nextcloud.android.common.ui.color.ColorUtil +import com.nextcloud.android.common.ui.theme.MaterialSchemes +import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase +import scheme.Scheme +import javax.inject.Inject + +/** + * View theme utils for Material views (com.google.android.material.*) + */ +@Suppress("TooManyFunctions") +class MaterialViewThemeUtils @Inject constructor(schemes: MaterialSchemes, private val colorUtil: ColorUtil) : + ViewThemeUtilsBase(schemes) { + fun colorToolbarOverflowIcon(toolbar: MaterialToolbar) { + withScheme(toolbar) { scheme -> + toolbar.overflowIcon?.setColorFilter(scheme.onSurface, PorterDuff.Mode.SRC_ATOP) + } + } + + fun themeSearchBarText(searchText: MaterialTextView) { + withScheme(searchText) { scheme -> + searchText.setHintTextColor(scheme.onSurfaceVariant) + } + } + + fun themeFAB(fab: FloatingActionButton) { + withScheme(fab) { scheme -> + fab.backgroundTintList = ColorStateList.valueOf(scheme.primaryContainer) + fab.imageTintList = ColorStateList.valueOf(scheme.onPrimaryContainer) + } + } + + fun themeCardView(cardView: MaterialCardView) { + withScheme(cardView) { scheme -> + cardView.backgroundTintList = ColorStateList.valueOf(scheme.surface) + } + } + + fun colorMaterialTextButton(button: MaterialButton) { + withScheme(button) { scheme -> + button.rippleColor = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_pressed) + ), + intArrayOf( + colorUtil.adjustOpacity(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + } + + fun colorMaterialButtonText(button: MaterialButton) { + withScheme(button) { scheme -> + val disabledColor = ContextCompat.getColor(button.context, com.nextcloud.talk.R.color.disabled_text) + val colorStateList = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf(scheme.primary, disabledColor) + ) + button.setTextColor(colorStateList) + button.iconTint = colorStateList + } + } + + fun colorMaterialButtonPrimaryFilled(button: MaterialButton) { + withScheme(button) { scheme -> + button.backgroundTintList = + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + colorUtil.adjustOpacity(scheme.onSurface, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + + button.setTextColor( + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.onPrimary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + ) + + button.iconTint = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.onPrimary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + } + + fun colorMaterialButtonPrimaryOutlined(button: MaterialButton) { + withScheme(button) { scheme -> + button.strokeColor = ColorStateList.valueOf(scheme.outline) + button.setTextColor( + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + ) + button.iconTint = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + } + + fun colorMaterialButtonPrimaryBorderless(button: MaterialButton) { + withScheme(button) { scheme -> + button.setTextColor( + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + ) + button.iconTint = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + colorUtil.adjustOpacity(scheme.onSurface, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + } + + fun themeToolbar(toolbar: MaterialToolbar) { + withScheme(toolbar) { scheme -> + toolbar.setBackgroundColor(scheme.surface) + toolbar.setNavigationIconTint(scheme.onSurface) + toolbar.setTitleTextColor(scheme.onSurface) + } + } + + fun colorCardViewBackground(card: MaterialCardView) { + withScheme(card) { scheme -> + card.setCardBackgroundColor(scheme.surfaceVariant) + } + } + + fun colorProgressBar(progressIndicator: LinearProgressIndicator) { + withScheme(progressIndicator) { scheme -> + progressIndicator.setIndicatorColor(scheme.primary) + } + } + + fun colorTextInputLayout(textInputLayout: TextInputLayout) { + withScheme(textInputLayout) { scheme -> + val errorColor = scheme.onSurfaceVariant + + val errorColorStateList = ColorStateList( + arrayOf( + intArrayOf(-android.R.attr.state_focused), + intArrayOf(android.R.attr.state_focused) + ), + intArrayOf( + errorColor, + errorColor + ) + ) + val coloredColorStateList = ColorStateList( + arrayOf( + intArrayOf(-android.R.attr.state_focused), + intArrayOf(android.R.attr.state_focused) + ), + intArrayOf( + scheme.outline, + scheme.primary + ) + ) + + textInputLayout.setBoxStrokeColorStateList(coloredColorStateList) + textInputLayout.setErrorIconTintList(errorColorStateList) + textInputLayout.setErrorTextColor(errorColorStateList) + textInputLayout.boxStrokeErrorColor = errorColorStateList + textInputLayout.defaultHintTextColor = coloredColorStateList + } + } + + fun themeTabLayoutOnSurface(tabLayout: TabLayout) { + withScheme(tabLayout) { scheme -> + tabLayout.setBackgroundColor(scheme.surface) + colorTabLayout(tabLayout, scheme) + } + } + + fun colorTabLayout(tabLayout: TabLayout, scheme: Scheme) { + tabLayout.setSelectedTabIndicatorColor(scheme.primary) + tabLayout.tabTextColors = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_selected), + intArrayOf(-android.R.attr.state_selected) + ), + intArrayOf( + scheme.primary, + ContextCompat.getColor(tabLayout.context, com.nextcloud.talk.R.color.high_emphasis_text) + ) + ) + tabLayout.tabRippleColor = ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_pressed) + ), + intArrayOf( + colorUtil.adjustOpacity(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + } + + fun colorChipBackground(chip: Chip) { + withScheme(chip) { scheme -> + chip.chipBackgroundColor = ColorStateList.valueOf(scheme.primary) + chip.setTextColor(scheme.onPrimary) + } + } + + fun colorChipOutlined(chip: Chip, strokeWidth: Float) { + withScheme(chip) { scheme -> + chip.chipBackgroundColor = ColorStateList.valueOf(Color.TRANSPARENT) + chip.chipStrokeWidth = strokeWidth + chip.chipStrokeColor = ColorStateList.valueOf(scheme.primary) + chip.setTextColor(scheme.primary) + } + } + + 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/utils/preferences/MagicUserInputModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java index 47736d2e4..ab7342090 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 @@ -73,7 +73,7 @@ public class MagicUserInputModule extends StandardUserInputModule { final Listener listener) { final View view = LayoutInflater.from(context).inflate(R.layout.dialog_edittext, null); final EditText inputField = view.findViewById(R.id.mp_text_input); - viewThemeUtils.androidViewThemeUtils.colorEditText(inputField); + viewThemeUtils.platform.colorEditText(inputField); int paddingStartEnd = Math.round(view.getResources().getDimension(R.dimen.standard_padding)); int paddingTopBottom = Math.round(view.getResources().getDimension(R.dimen.dialog_padding_top_bottom)); @@ -96,12 +96,12 @@ public class MagicUserInputModule extends StandardUserInputModule { .setTitle(title) .setView(view); - viewThemeUtils.colorMaterialAlertDialogBackground(view.getContext(), dialogBuilder); + viewThemeUtils.material.colorMaterialAlertDialogBackground(view.getContext(), dialogBuilder); final Dialog dialog = dialogBuilder.show(); TextView button = view.findViewById(R.id.mp_btn_confirm); - viewThemeUtils.androidViewThemeUtils.colorPrimaryTextViewElement(button); + viewThemeUtils.platform.colorPrimaryTextViewElement(button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {