From a24f2729860cda18bb2a9db4b95cc2c97eeacfab Mon Sep 17 00:00:00 2001 From: A117870935 Date: Sun, 14 May 2023 23:02:09 +0530 Subject: [PATCH] NMC-2045: Customized popup menu, overflow menu and FastScroller. NMC-2049: Customized Spinner. --- .../ui/activity/UploadFilesActivity.java | 7 +- .../android/ui/adapter/SyncedFolderAdapter.kt | 5 +- .../android/ui/adapter/UploadListAdapter.java | 5 +- .../android/ui/fragment/GalleryFragment.java | 4 +- .../ui/fragment/OCFileListFragment.java | 3 +- .../ui/preview/PreviewImageFragment.kt | 3 +- .../ui/preview/PreviewMediaFragment.kt | 15 ++++ .../android/ui/trashbin/TrashbinActivity.kt | 8 +- .../theme/FilesSpecificViewThemeUtils.kt | 5 +- app/src/main/res/drawable/bg_spinner.xml | 9 ++ .../main/res/layout/simple_spinner_item.xml | 10 +++ .../main/res/layout/upload_files_layout.xml | 2 + app/src/main/res/values-night/colors.xml | 65 ++++++++++++++ app/src/main/res/values/colors.xml | 90 +++++++++++++++++++ app/src/main/res/values/nmc_popup_styles.xml | 16 ++++ .../main/res/values/nmc_spinner_styles.xml | 8 ++ app/src/main/res/values/styles.xml | 6 +- 17 files changed, 248 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/drawable/bg_spinner.xml create mode 100644 app/src/main/res/layout/simple_spinner_item.xml create mode 100644 app/src/main/res/values/nmc_popup_styles.xml create mode 100644 app/src/main/res/values/nmc_spinner_styles.xml diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java index 01cd186d83f6..f39fb5758cbc 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -17,6 +17,8 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; +import android.graphics.Color; +import android.graphics.PorterDuff; import android.os.Bundle; import android.os.Environment; import android.view.Menu; @@ -208,10 +210,12 @@ public void onCreate(Bundle savedInstanceState) { behaviours.add(getString(R.string.uploader_upload_files_behaviour_only_upload)); behaviours.add(getString(R.string.uploader_upload_files_behaviour_upload_and_delete_from_source)); - ArrayAdapter behaviourAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, + //custom spinner item layout for NMC + ArrayAdapter behaviourAdapter = new ArrayAdapter<>(this, R.layout.simple_spinner_item, behaviours); behaviourAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); binding.uploadFilesSpinnerBehaviour.setAdapter(behaviourAdapter); + binding.uploadFilesSpinnerBehaviour.getBackground().setColorFilter(getResources().getColor(R.color.primary, null), PorterDuff.Mode.SRC_IN); binding.uploadFilesSpinnerBehaviour.setSelection(localBehaviour); // setup the toolbar @@ -232,6 +236,7 @@ public void onCreate(Bundle savedInstanceState) { showToolbarSpinner(); mToolbarSpinner.setAdapter(mDirectories); + mToolbarSpinner.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN); mToolbarSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { 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 e701d4468daa..6577d3d80730 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 @@ -374,7 +375,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/UploadListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java index fac48e303d2d..9d8e5c4b1e11 100755 --- a/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java @@ -70,6 +70,7 @@ import androidx.annotation.NonNull; import kotlin.Unit; +import androidx.appcompat.view.ContextThemeWrapper; /** * This Adapter populates a ListView with following types of uploads: pending, active, completed. Filtering possible. @@ -691,7 +692,9 @@ private void showItemConflictPopup(User user, OCUpload item, String status, View view) { - PopupMenu popup = new PopupMenu(MainApp.getAppContext(), view); + //NMC Customisation + ContextThemeWrapper ctw = new ContextThemeWrapper(MainApp.getAppContext(), R.style.CustomPopupTheme); + PopupMenu popup = new PopupMenu(ctw, view); popup.inflate(R.menu.upload_list_item_file_conflict); popup.setOnMenuItemClickListener(i -> { int itemId = i.getItemId(); diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java index 094c03da6464..8c40add90015 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java @@ -42,6 +42,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -288,7 +289,8 @@ public void onCreateOptionsMenu(Menu menu, @NonNull MenuInflater inflater) { MenuItem menuItem = menu.findItem(R.id.action_three_dot_icon); if (menuItem != null) { - viewThemeUtils.platform.colorMenuItemText(requireContext(), menuItem); + //NMC customization + menuItem.setIcon(viewThemeUtils.platform.colorDrawable(menuItem.getIcon(), ContextCompat.getColor(requireContext(), R.color.fontAppbar))); } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 25a1d1a0b192..f33fb3635f8a 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -821,7 +821,8 @@ public boolean onCreateActionMode(ActionMode mode, Menu menu) { final MenuItem item = menu.findItem(R.id.custom_menu_placeholder_item); if (item.getIcon() != null) { - item.setIcon(viewThemeUtils.platform.colorDrawable(item.getIcon(), ContextCompat.getColor(requireContext(), R.color.white))); + // NMC customization + item.setIcon(viewThemeUtils.platform.colorDrawable(item.getIcon(), ContextCompat.getColor(requireContext(), R.color.fontAppbar))); } mActiveActionMode.invalidate(); diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt index 9b16124a0e6d..f85af8f5ede6 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt @@ -355,10 +355,11 @@ class PreviewImageFragment : 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/PreviewMediaFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.kt index de86259e9337..b52155a3a80a 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.kt @@ -33,6 +33,7 @@ import android.view.ViewGroup import androidx.annotation.OptIn import androidx.annotation.StringRes import androidx.core.net.toUri +import androidx.core.content.ContextCompat import androidx.core.view.MenuHost import androidx.core.view.MenuProvider import androidx.drawerlayout.widget.DrawerLayout @@ -71,6 +72,7 @@ import com.owncloud.android.ui.dialog.ConfirmationDialogFragment import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment import com.owncloud.android.ui.fragment.FileFragment import com.owncloud.android.utils.MimeTypeUtil +import com.owncloud.android.utils.theme.ViewThemeUtils import java.lang.ref.WeakReference import java.util.concurrent.Executors import javax.inject.Inject @@ -121,6 +123,9 @@ class PreviewMediaFragment : @Inject lateinit var backgroundJobManager: BackgroundJobManager + @Inject + lateinit var viewThemeUtils: ViewThemeUtils + lateinit var binding: FragmentPreviewMediaBinding private var emptyListView: ViewGroup? = null private var exoPlayer: ExoPlayer? = null @@ -312,6 +317,16 @@ class PreviewMediaFragment : override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menu.removeItem(R.id.action_search) menuInflater.inflate(R.menu.custom_menu_placeholder, menu) + // NMC customization + val item = menu.findItem(R.id.custom_menu_placeholder_item) + item.icon?.let { + item.setIcon( + 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/trashbin/TrashbinActivity.kt b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt index 75fc42f109fd..df6346f24a4f 100644 --- a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt @@ -23,6 +23,7 @@ import androidx.activity.OnBackPressedCallback 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.drawerlayout.widget.DrawerLayout import androidx.recyclerview.widget.LinearLayoutManager @@ -237,7 +238,9 @@ class TrashbinActivity : } override fun onOverflowIconClicked(file: TrashbinFile, view: View) { - val popup = PopupMenu(this, view) + // NMC Customization + val ctw = ContextThemeWrapper(this, R.style.CustomPopupTheme) + val popup = PopupMenu(ctw, view) popup.inflate(R.menu.item_trashbin) popup.setOnMenuItemClickListener { onFileActionChosen(it.itemId, setOf(file)) @@ -569,11 +572,12 @@ class TrashbinActivity : val inflater: MenuInflater = activity.menuInflater inflater.inflate(R.menu.custom_menu_placeholder, menu) val item = menu.findItem(R.id.custom_menu_placeholder_item) + // NMC Customization item.icon?.let { item.setIcon( viewThemeUtils.platform.colorDrawable( it, - ContextCompat.getColor(activity, R.color.white) + ContextCompat.getColor(activity, 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 b2acffbafbf8..17757069e5b4 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 @@ -107,7 +107,8 @@ 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)) } } @@ -118,7 +119,7 @@ class FilesSpecificViewThemeUtils @Inject constructor( me.zhanghai.android.fastscroll.R.drawable.afs_md2_thumb, null ) - return androidViewThemeUtils.tintPrimaryDrawable(context, thumbDrawable)!! + return androidViewThemeUtils.colorDrawable(thumbDrawable!!, context.resources.getColor(R.color.primary, null)) } private fun getHomeAsUpIcon(isMenu: Boolean): Int { 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..d4e0efd9c107 --- /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 4012193eb6a9..62a63ed9cf96 100644 --- a/app/src/main/res/layout/upload_files_layout.xml +++ b/app/src/main/res/layout/upload_files_layout.xml @@ -60,7 +60,9 @@ diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index db1e1d218038..e51fe9edd7db 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -39,4 +39,69 @@ @android:color/white #101418 + + + #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 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 36d7459ecdaf..5e5aafeb02d4 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -89,4 +89,94 @@ #A5A5A5 #F7F9FF + + + #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 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 17cdbaabca4a..574e270c497a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -370,9 +370,9 @@