Add IDs to MenuItems
Useful for differentiating between MenuItems in callbacks, particuarly
xml MenuItems.
Test: Robotests and paintbooth
Change-Id: I01471e59194f6a9a5d5dda2cb5234545b467313f
diff --git a/car-ui-lib/res/values/attrs.xml b/car-ui-lib/res/values/attrs.xml
index 5778cda..84c3682 100644
--- a/car-ui-lib/res/values/attrs.xml
+++ b/car-ui-lib/res/values/attrs.xml
@@ -42,6 +42,8 @@
</declare-styleable>
<declare-styleable name="CarUiToolbarMenuItem">
+ <!-- Id of MenuItem, used to differentiate them -->
+ <attr name="id" format="integer"/>
<!-- Show/hide the MenuItem -->
<attr name="visible" format="boolean"/>
<!-- Title -->
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
index 5c2503e..fc27679 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
@@ -55,6 +55,7 @@
@CarUxRestrictions.CarUxRestrictionsInfo
private final int mUxRestrictions;
+ private int mId;
private CarUxRestrictions mCurrentRestrictions;
private Listener mListener;
private CharSequence mTitle;
@@ -68,6 +69,7 @@
private MenuItem(Builder builder) {
mContext = builder.mContext;
+ mId = builder.mId;
mIsCheckable = builder.mIsCheckable;
mIsActivatable = builder.mIsActivatable;
mTitle = builder.mTitle;
@@ -92,6 +94,16 @@
}
}
+ /** Sets the id, which is purely for the client to distinguish MenuItems with. */
+ public void setId(int id) {
+ mId = id;
+ }
+
+ /** Gets the id, which is purely for the client to distinguish MenuItems with. */
+ public int getId() {
+ return mId;
+ }
+
/** Returns whether the MenuItem is enabled */
public boolean isEnabled() {
return mIsEnabled;
@@ -288,6 +300,7 @@
public static final class Builder {
private Context mContext;
+ private int mId;
private CharSequence mTitle;
private Drawable mIcon;
private OnClickListener mOnClickListener;
@@ -323,6 +336,12 @@
return new MenuItem(this);
}
+ /** Sets the id, which is purely for the client to distinguish MenuItems with. */
+ public Builder setId(int id) {
+ mId = id;
+ return this;
+ }
+
/** Sets the title to a string resource id */
public Builder setTitle(int resId) {
setTitle(mContext.getString(resId));
@@ -497,6 +516,11 @@
}
}
+ /** Get a new {@link Builder}. */
+ public static Builder builder(Context context) {
+ return new Builder(context);
+ }
+
/**
* OnClickListener for a MenuItem.
*/
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
index 288642b..183fa5b 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
@@ -208,6 +208,7 @@
TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.CarUiToolbarMenuItem);
try {
+ int id = a.getInt(R.styleable.CarUiToolbarMenuItem_id, 0);
String title = a.getString(R.styleable.CarUiToolbarMenuItem_title);
Drawable icon = a.getDrawable(R.styleable.CarUiToolbarMenuItem_icon);
boolean tinted = a.getBoolean(R.styleable.CarUiToolbarMenuItem_tinted, true);
@@ -253,7 +254,8 @@
parser.next();
parser.require(XmlPullParser.END_TAG, null, "MenuItem");
- MenuItem.Builder builder = new MenuItem.Builder(c)
+ MenuItem.Builder builder = MenuItem.builder(c)
+ .setId(id)
.setTitle(title)
.setIcon(icon)
.setOnClickListener(onClickListener)
diff --git a/car-ui-lib/tests/paintbooth/res/xml/menuitems.xml b/car-ui-lib/tests/paintbooth/res/xml/menuitems.xml
index 119afea..74e5e82 100644
--- a/car-ui-lib/tests/paintbooth/res/xml/menuitems.xml
+++ b/car-ui-lib/tests/paintbooth/res/xml/menuitems.xml
@@ -18,6 +18,7 @@
<MenuItem
app:title="@string/preferences_screen_title"/>
<MenuItem
+ app:id="5"
app:title="Bar"
app:icon="@drawable/ic_tracklist"
app:onClick="xmlMenuItemClicked"/>
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
index 0ef44ec..b42a2ec 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
@@ -83,7 +83,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_untined_icon), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setIcon(R.drawable.ic_tracklist)
.setTinted(false)
.setOnClickListener(
@@ -95,7 +95,7 @@
Mutable<Integer> overflowCounter = new Mutable<>(1);
mButtons.add(Pair.create(getString(R.string.toolbar_add_overflow), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setTitle("Foo " + overflowCounter.value)
.setOnClickListener(
i -> Toast.makeText(this, "Clicked",
@@ -107,7 +107,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_switch), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setCheckable()
.setOnClickListener(
i ->
@@ -120,7 +120,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_text), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setTitle("Baz")
.setOnClickListener(
i -> Toast.makeText(this, "Clicked",
@@ -130,7 +130,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_icon_text), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setIcon(R.drawable.ic_tracklist)
.setTitle("Bar")
.setShowIconAndTitle(true)
@@ -142,7 +142,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_untinted_icon_and_text), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setIcon(R.drawable.ic_tracklist)
.setTitle("Bar")
.setShowIconAndTitle(true)
@@ -155,7 +155,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_activatable), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setIcon(R.drawable.ic_tracklist)
.setActivatable()
.setOnClickListener(
@@ -166,7 +166,7 @@
}));
mButtons.add(Pair.create(getString(R.string.toolbar_add_morphing), v -> {
- mMenuItems.add(new MenuItem.Builder(this)
+ mMenuItems.add(MenuItem.builder(this)
.setTitle("Become icon")
.setOnClickListener(i ->
i.setIcon(i.getIcon() == null ? R.drawable.ic_tracklist : 0))
@@ -268,7 +268,8 @@
}
public void xmlMenuItemClicked(MenuItem item) {
- Toast.makeText(this, "Xml item clicked! " + item.getTitle(), Toast.LENGTH_SHORT).show();
+ Toast.makeText(this, "Xml item clicked! " + item.getTitle() + ", id: " + item.getId(),
+ Toast.LENGTH_SHORT).show();
}
private void getMenuItem(MenuItem.OnClickListener listener) {
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java
index 98f74b5..68c37d1 100644
--- a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java
@@ -311,6 +311,26 @@
}
@Test
+ public void menuItems_builder_id() {
+ MenuItem item = MenuItem.builder(mContext)
+ .setId(5)
+ .build();
+
+ assertThat(item.getId()).isEqualTo(5);
+ }
+
+ @Test
+ public void menuItems_setId_shouldWork() {
+ MenuItem item = MenuItem.builder(mContext).build();
+
+ assertThat(item.getId()).isEqualTo(0);
+
+ item.setId(7);
+
+ assertThat(item.getId()).isEqualTo(7);
+ }
+
+ @Test
public void menuItems_whenClicked_shouldCallListener() {
assertThat(getMenuItemViewCount()).isEqualTo(0);