Эх сурвалжийг харах

Adjusted drawer menu item tint management

Signed-off-by: Kilian Périsset <kilian.perisset@infomaniak.com>
Kilian Périsset 4 жил өмнө
parent
commit
eb88e0f7e9

+ 13 - 19
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -31,14 +31,12 @@ import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
-import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.SystemClock;
-import android.text.Html;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -691,30 +689,26 @@ public abstract class DrawerActivity extends ToolbarActivity
      */
     protected void setDrawerMenuItemChecked(int menuItemId) {
         if (mNavigationView != null && mNavigationView.getMenu().findItem(menuItemId) != null) {
+            mCheckedMenuItem = menuItemId;
+            MenuItem currentItem = mNavigationView.getMenu().findItem(menuItemId);
+            int drawerColor = getResources().getColor(R.color.drawer_text_color);
+            int activeColor = ThemeUtils.elementColor(this);
 
-            MenuItem item = mNavigationView.getMenu().findItem(menuItemId);
-            item.setChecked(true);
+            currentItem.setChecked(true);
 
-            // reset all tinted icons
+            // For each menu item, change the color of the selected item, and of the other items
             for (int i = 0; i < mNavigationView.getMenu().size(); i++) {
                 MenuItem menuItem = mNavigationView.getMenu().getItem(i);
                 if (menuItem.getIcon() != null) {
-                    menuItem.getIcon().clearColorFilter();
-                    menuItem.setTitle(Html.fromHtml(
-                        "<font color='"
-                            + ThemeUtils.colorToHexString(ContextCompat.getColor(this, R.color.drawer_text_color))
-                            + "'>" + menuItem.getTitle()
-                            + "</font>"));
+                    if (menuItem != currentItem) {
+                        ThemeUtils.tintDrawable(menuItem.getIcon(), drawerColor);
+                        ThemeUtils.tintMenuItemText(menuItem, drawerColor);
+                    } else {
+                        ThemeUtils.tintDrawable(currentItem.getIcon(), activeColor);
+                        ThemeUtils.tintMenuItemText(currentItem, activeColor);
+                    }
                 }
             }
-
-            int elementColor = ThemeUtils.elementColor(this);
-            ThemeUtils.tintDrawable(item.getIcon(), elementColor);
-
-            String colorHex = ThemeUtils.colorToHexString(elementColor);
-            item.setTitle(Html.fromHtml("<font color='" + colorHex + "'>" + item.getTitle() + "</font>"));
-
-            mCheckedMenuItem = menuItemId;
         } else {
             Log_OC.w(TAG, "setDrawerMenuItemChecked has been called with invalid menu-item-ID");
         }

+ 13 - 0
src/main/java/com/owncloud/android/utils/ThemeUtils.java

@@ -34,6 +34,7 @@ import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.Window;
 import android.widget.EditText;
@@ -634,6 +635,18 @@ public final class ThemeUtils {
         return null;
     }
 
+    /**
+     * Will change a menu item text tint
+     * @param item the menu item object
+     * @param color the wanted color (as resource or color)
+     */
+    public static void tintMenuItemText(MenuItem item, int color) {
+        SpannableString newItemTitle = new SpannableString(item.getTitle());
+        newItemTitle.setSpan(new ForegroundColorSpan(color), 0, newItemTitle.length(),
+                             Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+        item.setTitle(newItemTitle);
+    }
+
     public static String colorToHexString(int color) {
         return String.format("#%06X", 0xFFFFFF & color);
     }

+ 1 - 0
src/main/res/layout/drawer.xml

@@ -30,6 +30,7 @@
         android:fitsSystemWindows="true"
         android:background="@color/appbar"
         android:theme="@style/NavigationView_ItemTextAppearance"
+        app:itemTextColor="@color/drawer_text_color"
         app:headerLayout="@layout/drawer_header"
         app:menu="@menu/partial_drawer_entries">