diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
index 991f623dba03..1551f1f83852 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
@@ -41,6 +41,7 @@ import androidx.activity.OnBackPressedCallback
import androidx.activity.viewModels
import androidx.annotation.VisibleForTesting
import androidx.appcompat.widget.SearchView
+import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
@@ -1224,7 +1225,17 @@ class FileDisplayActivity :
val drawerOpen = isDrawerOpen
drawerMenuItemsToShowHide.forEach { it.isVisible = !drawerOpen }
- menu?.findItem(R.id.action_current_folder_actions)?.isVisible = canShowCurrentFolderActions()
+ // NMC: custom overflow icon color
+ val item = menu?.findItem(R.id.action_current_folder_actions)
+ item?.isVisible = canShowCurrentFolderActions()
+ item?.icon?.let {
+ item.setIcon(
+ viewThemeUtils.platform.colorDrawable(
+ it,
+ ContextCompat.getColor(this, R.color.fontAppbar)
+ )
+ )
+ }
return super.onPrepareOptionsMenu(menu)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.kt
index 4eae09235429..68d949f57da7 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.kt
@@ -18,6 +18,7 @@ import android.accounts.Account
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
+import android.graphics.Color
import android.os.Bundle
import android.os.Environment
import android.view.Menu
@@ -28,6 +29,8 @@ import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SearchView
+import androidx.core.graphics.BlendModeColorFilterCompat
+import androidx.core.graphics.BlendModeCompat
import androidx.core.view.MenuProvider
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.account.User
@@ -250,6 +253,8 @@ class UploadFilesActivity :
private fun setupToolbarSpinner() {
toolbarSpinner.visibility = View.VISIBLE
toolbarSpinner.adapter = directories
+ toolbarSpinner.background.colorFilter =
+ BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.TRANSPARENT, BlendModeCompat.SRC_IN)
toolbarSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
// Dirs are ordered deepest first, so 0 is current, 1 is parent ... until "/" .
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/uploadfiles/UploadBehaviourSelector.kt b/app/src/main/java/com/owncloud/android/ui/activity/uploadfiles/UploadBehaviourSelector.kt
index b81558580f0e..91cfbe984a69 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/uploadfiles/UploadBehaviourSelector.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/uploadfiles/UploadBehaviourSelector.kt
@@ -8,6 +8,8 @@ package com.owncloud.android.ui.activity.uploadfiles
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.core.graphics.drawable.DrawableCompat
import com.nextcloud.client.preferences.AppPreferences
import com.owncloud.android.R
import com.owncloud.android.databinding.UploadFilesLayoutBinding
@@ -40,9 +42,19 @@ class UploadBehaviourSelector(
activity.getString(R.string.uploader_upload_files_behaviour_upload_and_delete_from_source)
)
- spinner.adapter = ArrayAdapter(activity, android.R.layout.simple_spinner_item, behaviours).apply {
+ // custom spinner item layout for NMC
+ spinner.adapter = ArrayAdapter(activity, R.layout.simple_spinner_item, behaviours).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
}
+
+ // NMC Customization for dropdown icon tinting
+ val background = DrawableCompat.wrap(spinner.background).mutate()
+ DrawableCompat.setTintList(
+ background,
+ ContextCompat.getColorStateList(activity, R.color.spinner_color_state)
+ )
+ spinner.background = background
+
spinner.setSelection(preferences.uploaderBehaviour)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.kt
index 921492245537..00a8c4786dee 100644
--- a/app/src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.kt
+++ b/app/src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.kt
@@ -14,6 +14,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.PopupMenu
+import androidx.appcompat.view.ContextThemeWrapper
import androidx.annotation.VisibleForTesting
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
@@ -373,7 +374,9 @@ class SyncedFolderAdapter(
}
private fun onOverflowIconClicked(section: Int, item: SyncedFolderDisplayItem, view: View) {
- val popup = PopupMenu(context, view).apply {
+ // NMC Customisation
+ val ctw = ContextThemeWrapper(context, R.style.CustomPopupTheme)
+ val popup = PopupMenu(ctw, view).apply {
inflate(R.menu.synced_folders_adapter)
setOnMenuItemClickListener { i: MenuItem -> optionsItemSelected(i, section, item) }
menu
diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt
index 6729649ebc70..2440af6e82fb 100644
--- a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt
+++ b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt
@@ -15,6 +15,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.PopupMenu
+import androidx.appcompat.view.ContextThemeWrapper
import androidx.lifecycle.lifecycleScope
import com.afollestad.sectionedrecyclerview.SectionedRecyclerViewAdapter
import com.afollestad.sectionedrecyclerview.SectionedViewHolder
@@ -171,7 +172,9 @@ class UploadListAdapter(
}
private fun showFailedPopupMenu(holder: HeaderViewHolder) {
- PopupMenu(activity, holder.binding.uploadListAction).apply {
+ // NMC Customisation
+ val ctw = ContextThemeWrapper(activity, R.style.CustomPopupTheme)
+ PopupMenu(ctw, holder.binding.uploadListAction).apply {
inflate(R.menu.upload_list_failed_options)
setOnMenuItemClickListener { item ->
when (item.itemId) {
@@ -196,7 +199,9 @@ class UploadListAdapter(
}
private fun showCancelledPopupMenu(holder: HeaderViewHolder) {
- PopupMenu(activity, holder.binding.uploadListAction).apply {
+ // NMC Customisation
+ val ctw = ContextThemeWrapper(activity, R.style.CustomPopupTheme)
+ PopupMenu(ctw, holder.binding.uploadListAction).apply {
inflate(R.menu.upload_list_cancelled_options)
setOnMenuItemClickListener { item ->
when (item.itemId) {
@@ -516,7 +521,9 @@ class UploadListAdapter(
override fun onBindFooterViewHolder(holder: SectionedViewHolder?, section: Int) = Unit
private fun showItemConflictPopup(item: OCUpload, view: View) {
- PopupMenu(activity, view).apply {
+ // NMC Customisation
+ val ctw = ContextThemeWrapper(activity, R.style.CustomPopupTheme)
+ PopupMenu(ctw, view).apply {
inflate(R.menu.upload_list_item_file_conflict)
setOnMenuItemClickListener { menuItem ->
if (menuItem.itemId == R.id.action_upload_list_resolve_conflict) {
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.kt
index 226f799182a0..8fa39ccba994 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.kt
@@ -26,6 +26,7 @@ import android.view.ScaleGestureDetector
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.content.ContextCompat
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle
@@ -120,7 +121,13 @@ class GalleryFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_gallery_three_dots, menu)
val menuItem = menu.findItem(R.id.action_three_dot_icon)
- viewThemeUtils.platform.colorMenuItemText(requireContext(), menuItem)
+ // NMC customization
+ menuItem.icon = menuItem.icon?.let {
+ viewThemeUtils.platform.colorDrawable(
+ it,
+ ContextCompat.getColor(requireContext(), R.color.fontAppbar)
+ )
+ }
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListMultiChoiceModeListener.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListMultiChoiceModeListener.kt
index df00d14c251b..1e393d8b2fe9 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListMultiChoiceModeListener.kt
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListMultiChoiceModeListener.kt
@@ -159,7 +159,8 @@ internal class OCFileListMultiChoiceModeListener(private val fragment: OCFileLis
private fun tintPlaceholderIcon(placeholderItem: MenuItem) {
val icon = placeholderItem.icon ?: return
- val white = ContextCompat.getColor(fragment.requireContext(), R.color.white)
+ // NMC customization
+ val white = ContextCompat.getColor(fragment.requireContext(), R.color.fontAppbar)
placeholderItem.icon = fragment.viewThemeUtils.platform.colorDrawable(icon, white)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
index 8306217a58e4..5220b4cb83df 100644
--- a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
@@ -338,10 +338,11 @@ class PreviewMediaFragment :
val item = menu.findItem(R.id.custom_menu_placeholder_item)
item.icon?.let {
+ // NMC customization
item.setIcon(
viewThemeUtils.platform.colorDrawable(
it,
- ContextCompat.getColor(requireContext(), R.color.white)
+ ContextCompat.getColor(requireContext(), R.color.fontAppbar)
)
)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewPlaybackFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewPlaybackFragment.kt
index 2c30fb8b305b..413859bc7ec5 100644
--- a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewPlaybackFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewPlaybackFragment.kt
@@ -149,7 +149,7 @@ class PreviewPlaybackFragment :
item.setIcon(
viewThemeUtils.platform.colorDrawable(
it,
- ContextCompat.getColor(requireContext(), R.color.white)
+ ContextCompat.getColor(requireContext(), R.color.fontAppbar)
)
)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt
index 926f2139d38f..5ff2352f1502 100644
--- a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt
@@ -24,6 +24,7 @@ import android.widget.TextView
import androidx.annotation.IdRes
import androidx.annotation.VisibleForTesting
import androidx.core.content.ContextCompat
+import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
@@ -253,7 +254,9 @@ class TrashbinFragment :
}
override fun onOverflowIconClicked(file: TrashbinFile, view: View) {
- PopupMenu(requireContext(), view).apply {
+ // NMC Customization
+ val ctw = ContextThemeWrapper(requireContext(), R.style.CustomPopupTheme)
+ PopupMenu(ctw, view).apply {
inflate(R.menu.item_trashbin)
setOnMenuItemClickListener {
onFileActionChosen(it.itemId, setOf(file))
@@ -548,10 +551,11 @@ class TrashbinFragment :
val item = menu.findItem(R.id.custom_menu_placeholder_item)
item.icon?.let {
item.setIcon(
+ // NMC Customization: color of menu
activity?.let { it1 ->
viewThemeUtils.platform.colorDrawable(
it,
- ContextCompat.getColor(it1, R.color.white)
+ ContextCompat.getColor(it1, R.color.fontAppbar)
)
}
)
diff --git a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
index 5b2c6701e078..920145775abc 100644
--- a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
+++ b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
@@ -104,15 +104,19 @@ class FilesSpecificViewThemeUtils @Inject constructor(
.setThumbDrawable(getThumbDrawable(context))
.setPopupStyle {
PopupStyles.MD2.accept(it)
- it.background = FastScrollPopupBackground(context, scheme.primary)
+ //NMC customisation
+ it.background = FastScrollPopupBackground(context, context.resources.getColor(R.color.primary, null))
}
}
private fun getThumbDrawable(context: Context): Drawable = checkNotNull(
- androidViewThemeUtils.tintDrawable(
- context,
- me.zhanghai.android.fastscroll.R.drawable.afs_md2_thumb,
- ColorRole.PRIMARY
+ androidViewThemeUtils.colorDrawable(
+ ResourcesCompat.getDrawable(
+ context.resources,
+ me.zhanghai.android.fastscroll.R.drawable.afs_md2_thumb,
+ null
+ )!!,
+ context.resources.getColor(R.color.primary, null)
)
) { "Fast scroller thumb drawable not found" }
diff --git a/app/src/main/res/color/spinner_color_state.xml b/app/src/main/res/color/spinner_color_state.xml
new file mode 100644
index 000000000000..5913e0da1a1d
--- /dev/null
+++ b/app/src/main/res/color/spinner_color_state.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_spinner.xml b/app/src/main/res/drawable/bg_spinner.xml
new file mode 100644
index 000000000000..d48644569a5c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_spinner.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/simple_spinner_item.xml b/app/src/main/res/layout/simple_spinner_item.xml
new file mode 100644
index 000000000000..55f585937c2d
--- /dev/null
+++ b/app/src/main/res/layout/simple_spinner_item.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/upload_files_layout.xml b/app/src/main/res/layout/upload_files_layout.xml
index 38d17a7566a8..b06c7b88e30e 100644
--- a/app/src/main/res/layout/upload_files_layout.xml
+++ b/app/src/main/res/layout/upload_files_layout.xml
@@ -60,6 +60,7 @@
diff --git a/app/src/main/res/values-night/nmc_colors.xml b/app/src/main/res/values-night/nmc_colors.xml
new file mode 100644
index 000000000000..229d9361177d
--- /dev/null
+++ b/app/src/main/res/values-night/nmc_colors.xml
@@ -0,0 +1,73 @@
+
+
+
+
+ #FFFFFF
+ @color/grey_30
+ @color/grey_30
+ #CCCCCC
+ @color/grey_70
+ @color/grey_80
+ #2D2D2D
+ @color/grey_70
+ @color/grey_70
+
+
+ @color/grey_80
+ @color/grey_0
+
+
+ @color/grey_80
+ @color/grey_0
+
+
+ @color/grey_60
+ @color/grey_0
+ @color/grey_0
+ @color/grey_30
+ #FFFFFF
+ @color/grey_30
+ @color/grey_80
+ #FFFFFF
+
+
+ @color/grey_80
+ @color/grey_30
+ @color/grey_0
+
+
+ @color/grey_80
+ @color/grey_0
+ @color/grey_80
+
+
+ @color/grey_70
+ @color/grey_60
+
+
+ @color/grey_70
+ @color/grey_70
+
+
+ #FFFFFF
+ @color/grey_30
+ @color/grey_0
+ @color/grey_0
+ @color/grey_0
+ @color/grey_0
+ @color/grey_60
+ @color/grey_0
+ #FFFFFF
+ #7d94f9
+
+
+ #121212
+ @color/grey_0
+ @color/grey_80
+ @color/grey_80
+
\ No newline at end of file
diff --git a/app/src/main/res/values/nmc_colors.xml b/app/src/main/res/values/nmc_colors.xml
new file mode 100644
index 000000000000..3aa33ccdf362
--- /dev/null
+++ b/app/src/main/res/values/nmc_colors.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ #191919
+ @color/primary
+ #191919
+ #191919
+ @color/grey_30
+ @android:color/white
+ #FFFFFF
+ @color/grey_0
+ #CCCCCC
+ #77c4ff
+ #B3FFFFFF
+ @color/grey_10
+
+
+ #101010
+ #F2F2F2
+ #E5E5E5
+ #B2B2B2
+ #666666
+ #4C4C4C
+ #333333
+
+
+ @color/design_snackbar_background_color
+ @color/white
+
+
+ #FFFFFF
+ #191919
+
+
+ @color/grey_0
+ #191919
+ @color/primary
+ #191919
+ @color/primary
+ @color/grey_30
+ @color/white
+ #191919
+
+
+ #FFFFFF
+ #191919
+ #191919
+
+
+ #FFFFFF
+ #191919
+ #FFFFFF
+
+
+ @color/primary
+ #F399C7
+ #FFFFFF
+ @color/grey_30
+ @color/grey_10
+ @color/grey_0
+
+
+ @color/primary
+ @color/grey_30
+ @color/grey_30
+ #CCCCCC
+
+
+ #191919
+ @color/grey_30
+ #191919
+ #191919
+ #191919
+ #191919
+ @color/grey_30
+ #191919
+ #000000
+ #191919
+ #F6E5EB
+ #C16F81
+ #0D39DF
+ #0099ff
+ #2238df
+
+
+ @color/grey_0
+ #191919
+ @color/grey_0
+ @color/grey_30
+ #77b6bb
+ #5077b6bb
+
\ No newline at end of file
diff --git a/app/src/main/res/values/nmc_popup_styles.xml b/app/src/main/res/values/nmc_popup_styles.xml
new file mode 100644
index 000000000000..145a9c4ea15b
--- /dev/null
+++ b/app/src/main/res/values/nmc_popup_styles.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/nmc_spinner_styles.xml b/app/src/main/res/values/nmc_spinner_styles.xml
new file mode 100644
index 000000000000..1025e7759952
--- /dev/null
+++ b/app/src/main/res/values/nmc_spinner_styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index b01edd987c4e..8a1bd7c444e7 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -367,9 +367,9 @@