Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java |
index 0a36f1ad87f03f56d1337081684088e3e8992e13..4631ee96f4f97274facaf241268a7c604d502b86 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java |
@@ -12,6 +12,7 @@ import android.content.Context; |
import android.content.res.Resources; |
import android.graphics.Rect; |
import android.graphics.drawable.Drawable; |
+import android.graphics.drawable.LayerDrawable; |
import android.os.Build; |
import android.support.annotation.IdRes; |
import android.support.annotation.Nullable; |
@@ -37,6 +38,7 @@ import org.chromium.base.ApiCompatibilityUtils; |
import org.chromium.base.SysUtils; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.omaha.UpdateMenuItemHelper; |
+import org.chromium.chrome.browser.widget.PulseDrawable; |
import java.util.ArrayList; |
import java.util.List; |
@@ -169,6 +171,7 @@ public class AppMenu implements OnItemClickListener, OnKeyListener { |
int measureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); |
mPromptView.measure(measureSpec, measureSpec); |
footerHeight = mPromptView.getMeasuredHeight(); |
+ highlightViewInFooter(highlightedItemId, mPromptView); |
} else { |
mPromptView = null; |
} |
@@ -271,6 +274,35 @@ public class AppMenu implements OnItemClickListener, OnKeyListener { |
} |
} |
+ /** |
+ * Highlights the given {@code footerView} or one of its child. If {@code highlightedItemId} is |
+ * same as the id of the {@code footerView}, the entire {@code footerView} will be highlighted. |
+ * Otherwise it will only use a circle pulse around the individual child view. |
+ * @param highlightedItemId The resource id of the view that should be highlighted. Can be |
+ * {@code null} if no item should be highlighted. |
+ * @param footerView The root view in which the {@code highlightedItemId} is to be found. |
+ */ |
+ private void highlightViewInFooter(Integer highlightedItemId, View footerView) { |
+ if (highlightedItemId == null) return; |
+ |
+ View view = footerView.findViewById(highlightedItemId); |
+ if (view == null) return; |
+ |
+ PulseDrawable pulse = |
+ view == footerView ? PulseDrawable.createHighlight() : PulseDrawable.createCircle(); |
+ |
+ Drawable newBackground = pulse; |
+ Drawable currentBackground = view.getBackground(); |
+ if (currentBackground != null && currentBackground.getConstantState() != null) { |
+ Drawable backgroundClone = |
+ currentBackground.getConstantState().newDrawable(footerView.getResources()); |
+ newBackground = new LayerDrawable(new Drawable[] {pulse, backgroundClone}); |
+ } |
+ |
+ view.setBackground(newBackground); |
+ pulse.start(); |
+ } |
+ |
/** |
* @return The prompt view for the menu or null if one has not been set. |
*/ |