Bladeren bron

improve edge case FAB coloring

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 4 jaren geleden
bovenliggende
commit
a7088c8c87

+ 4 - 6
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -293,8 +293,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
         mFabMain = requireActivity().findViewById(R.id.fab_main);
 
         if (mFabMain != null) { // is not available in FolderPickerActivity
-            ThemeUtils.tintFloatingActionButton(mFabMain, requireContext());
-            ThemeUtils.drawableFloatingActionButton(mFabMain, R.drawable.ic_plus, requireContext());
+            ThemeUtils.colorFloatingActionButton(mFabMain, R.drawable.ic_plus, requireContext());
         }
 
         Log_OC.i(TAG, "onCreateView() end");
@@ -1770,7 +1769,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
             getActivity().runOnUiThread(() -> {
                 if (visible) {
                     mFabMain.show();
-                    ThemeUtils.tintFloatingActionButton(mFabMain, requireContext());
+                    ThemeUtils.colorFloatingActionButton(mFabMain, requireContext());
                 } else {
                     mFabMain.hide();
                 }
@@ -1820,11 +1819,10 @@ public class OCFileListFragment extends ExtendedListFragment implements
             getActivity().runOnUiThread(() -> {
                 if (enabled) {
                     mFabMain.setEnabled(true);
-                    ThemeUtils.tintFloatingActionButton(mFabMain, requireContext());
+                    ThemeUtils.colorFloatingActionButton(mFabMain, requireContext());
                 } else {
                     mFabMain.setEnabled(false);
-                    mFabMain.setBackgroundTintList(ColorStateList.valueOf(Color.GRAY));
-                    mFabMain.setRippleColor(Color.GRAY);
+                    ThemeUtils.colorFloatingActionButton(mFabMain, requireContext(), Color.GRAY);
                 }
             });
         }

+ 1 - 2
src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.java

@@ -113,8 +113,7 @@ public class PreviewTextStringFragment extends PreviewTextFragment {
             fabMain.setVisibility(View.VISIBLE);
             fabMain.setEnabled(true);
             fabMain.setOnClickListener(v -> edit());
-            ThemeUtils.tintFloatingActionButton(fabMain, requireContext());
-            ThemeUtils.drawableFloatingActionButton(fabMain, R.drawable.ic_edit, requireContext());
+            ThemeUtils.colorFloatingActionButton(fabMain, R.drawable.ic_edit, requireContext());
         }
 
         return view;

+ 35 - 5
src/main/java/com/owncloud/android/utils/ThemeUtils.java

@@ -119,7 +119,15 @@ public final class ThemeUtils {
         OCCapability capability = getCapability(account, context);
 
         try {
-            return adjustLightness(-0.2f, Color.parseColor(capability.getServerColor()), -1f);
+            return calculateDarkColor(Color.parseColor(capability.getServerColor()), context);
+        } catch (Exception e) {
+            return context.getResources().getColor(R.color.primary_dark);
+        }
+    }
+
+    public static int calculateDarkColor(int color, Context context){
+        try {
+            return adjustLightness(-0.2f, color, -1f);
         } catch (Exception e) {
             return context.getResources().getColor(R.color.primary_dark);
         }
@@ -722,14 +730,36 @@ public final class ThemeUtils {
         return String.format("#%06X", 0xFFFFFF & color);
     }
 
-    public static void tintFloatingActionButton(FloatingActionButton button, Context context) {
-        button.setBackgroundTintList(ColorStateList.valueOf(ThemeUtils.primaryColor(context)));
-        button.setRippleColor(ThemeUtils.primaryDarkColor(context));
+    public static void colorFloatingActionButton(FloatingActionButton button, @DrawableRes int drawable,
+                                                 Context context) {
+        int primaryColor = ThemeUtils.primaryColor(null, true, false, context);
+        colorFloatingActionButton(button, context, primaryColor);
+
+        if (Color.BLACK == primaryColor) {
+            button.setImageDrawable(ThemeUtils.tintDrawable(drawable, Color.WHITE));
+        } else if (Color.WHITE == primaryColor) {
+            button.setImageDrawable(ThemeUtils.tintDrawable(drawable, Color.BLACK));
+        } else {
+            button.setImageDrawable(ThemeUtils.tintDrawable(drawable, ThemeUtils.fontColor(context, false)));
+        }
+    }
+
+    public static void colorFloatingActionButton(FloatingActionButton button, Context context) {
+        colorFloatingActionButton(button, context, ThemeUtils.primaryColor(null, true, false, context));
+    }
+
+    public static void colorFloatingActionButton(FloatingActionButton button, Context context, int primaryColor) {
+        colorFloatingActionButton(button, primaryColor, calculateDarkColor(primaryColor, context));
+    }
+
+    public static void colorFloatingActionButton(FloatingActionButton button, int backgroundColor, int rippleColor) {
+        button.setBackgroundTintList(ColorStateList.valueOf(backgroundColor));
+        button.setRippleColor(rippleColor);
     }
 
     public static void drawableFloatingActionButton(FloatingActionButton button, @DrawableRes int
         drawable, Context context) {
-        button.setImageDrawable(ThemeUtils.tintDrawable(drawable, ThemeUtils.fontColor(context)));
+        int primaryColor = ThemeUtils.primaryColor(null, true, false, context);
     }
 
     private static OCCapability getCapability(Context context) {