Bug 784395: Custom menu should have proper checked/checkable behavior. [r=mfinkle]
authorSriram Ramasubramanian <sriram@mozilla.com>
Thu, 20 Sep 2012 11:04:50 -0700
changeset 107762 4023d860c3634edc1b41d823f3ceaa7a624acde7
parent 107761 1d109159eb0818d98f3320e5b7fced07dfb956eb
child 107763 b899ee7782ea7e109723d29b029a3e14c571df53
push id82
push usershu@rfrn.org
push dateFri, 05 Oct 2012 13:20:22 +0000
reviewersmfinkle
bugs784395
milestone18.0a1
Bug 784395: Custom menu should have proper checked/checkable behavior. [r=mfinkle]
mobile/android/base/GeckoMenuInflater.java
mobile/android/base/Makefile.in
mobile/android/base/MenuItemDefault.java
mobile/android/base/resources/drawable-hdpi-v11/menu_item_check.png
mobile/android/base/resources/drawable-hdpi-v11/menu_item_uncheck.png
mobile/android/base/resources/drawable-mdpi-v11/menu_item_check.png
mobile/android/base/resources/drawable-mdpi-v11/menu_item_uncheck.png
mobile/android/base/resources/drawable-xhdpi-v11/menu_item_check.png
mobile/android/base/resources/drawable-xhdpi-v11/menu_item_uncheck.png
mobile/android/base/resources/drawable/menu_item_checkmark.xml
mobile/android/base/resources/layout/menu_item.xml
--- a/mobile/android/base/GeckoMenuInflater.java
+++ b/mobile/android/base/GeckoMenuInflater.java
@@ -139,13 +139,12 @@ public class GeckoMenuInflater extends M
         a.recycle();
     }
         
     public void setValues(ParsedItem item, MenuItem menuItem) {
         menuItem.setChecked(item.checked)
                 .setVisible(item.visible)
                 .setEnabled(item.enabled)
                 .setCheckable(item.checkable)
-                .setCheckable(item.checked)
                 .setIcon(item.iconRes)
                 .setShowAsAction(item.showAsAction);
     }
 }
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -647,16 +647,17 @@ RES_DRAWABLE_MDPI_V11 = \
   res/drawable-mdpi-v11/ic_menu_reload.png \
   res/drawable-mdpi-v11/ic_menu_save_as_pdf.png \
   res/drawable-mdpi-v11/ic_menu_share.png \
   res/drawable-mdpi-v11/menu.png \
   res/drawable-mdpi-v11/menu_panel_bg.9.png \
   res/drawable-mdpi-v11/menu_popup_bg.9.png \
   res/drawable-mdpi-v11/menu_popup_arrow.png \
   res/drawable-mdpi-v11/menu_item_check.png \
+  res/drawable-mdpi-v11/menu_item_uncheck.png \
   $(NULL)
 
 RES_DRAWABLE_HDPI_V11 = \
   res/drawable-hdpi-v11/alert_addon.png \
   res/drawable-hdpi-v11/alert_app.png \
   res/drawable-hdpi-v11/alert_download.png \
   res/drawable-hdpi-v11/ic_menu_back.png \
   res/drawable-hdpi-v11/ic_menu_bookmark_add.png \
@@ -667,16 +668,17 @@ RES_DRAWABLE_HDPI_V11 = \
   res/drawable-hdpi-v11/ic_menu_reload.png \
   res/drawable-hdpi-v11/ic_menu_save_as_pdf.png \
   res/drawable-hdpi-v11/ic_menu_share.png \
   res/drawable-hdpi-v11/menu.png \
   res/drawable-hdpi-v11/menu_panel_bg.9.png \
   res/drawable-hdpi-v11/menu_popup_bg.9.png \
   res/drawable-hdpi-v11/menu_popup_arrow.png \
   res/drawable-hdpi-v11/menu_item_check.png \
+  res/drawable-hdpi-v11/menu_item_uncheck.png \
   $(NULL)
 
 RES_DRAWABLE_XHDPI_V11 = \
   res/drawable-xhdpi-v11/alert_addon.png \
   res/drawable-xhdpi-v11/alert_app.png \
   res/drawable-xhdpi-v11/alert_download.png \
   res/drawable-xhdpi-v11/ic_menu_back.png \
   res/drawable-xhdpi-v11/ic_menu_bookmark_add.png \
@@ -687,16 +689,17 @@ RES_DRAWABLE_XHDPI_V11 = \
   res/drawable-xhdpi-v11/ic_menu_reload.png \
   res/drawable-xhdpi-v11/ic_menu_save_as_pdf.png \
   res/drawable-xhdpi-v11/ic_menu_share.png \
   res/drawable-xhdpi-v11/menu.png \
   res/drawable-xhdpi-v11/menu_panel_bg.9.png \
   res/drawable-xhdpi-v11/menu_popup_bg.9.png \
   res/drawable-xhdpi-v11/menu_popup_arrow.png \
   res/drawable-xhdpi-v11/menu_item_check.png \
+  res/drawable-xhdpi-v11/menu_item_uncheck.png \
   $(NULL)
 
 RES_DRAWABLE_LAND_V14 = \
   res/drawable-land-v14/address_bar_bg.xml \
   $(NULL)
 
 RES_DRAWABLE_LAND_MDPI_V14 = \
   res/drawable-land-mdpi-v14/ic_awesomebar_go.png \
@@ -876,16 +879,17 @@ MOZ_ANDROID_DRAWABLES += \
   mobile/android/base/resources/drawable/address_bar_bg_shadow_repeat.xml       \
   mobile/android/base/resources/drawable/autocomplete_list_bg.9.png             \
   mobile/android/base/resources/drawable/awesomebar_tab_indicator.xml           \
   mobile/android/base/resources/drawable/awesomebar_tab_selected.xml            \
   mobile/android/base/resources/drawable/awesomebar_tab_unselected.xml          \
   mobile/android/base/resources/drawable/desktop_notification.png               \
   mobile/android/base/resources/drawable/highlight.xml                          \
   mobile/android/base/resources/drawable/menu_button.xml                        \
+  mobile/android/base/resources/drawable/menu_item_checkmark.xml                \
   mobile/android/base/resources/drawable/menu_level.xml                         \
   mobile/android/base/resources/drawable/progress_spinner.xml                   \
   mobile/android/base/resources/drawable/progress_spinner_1.png                 \
   mobile/android/base/resources/drawable/progress_spinner_2.png                 \
   mobile/android/base/resources/drawable/progress_spinner_3.png                 \
   mobile/android/base/resources/drawable/progress_spinner_4.png                 \
   mobile/android/base/resources/drawable/progress_spinner_5.png                 \
   mobile/android/base/resources/drawable/progress_spinner_6.png                 \
--- a/mobile/android/base/MenuItemDefault.java
+++ b/mobile/android/base/MenuItemDefault.java
@@ -4,40 +4,47 @@
 
 package org.mozilla.gecko;
 
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
+import android.widget.AbsListView;
+import android.widget.CheckBox;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.AbsListView;
 import android.widget.TextView;
 
 public class MenuItemDefault extends LinearLayout
                              implements GeckoMenuItem.Layout {
     private static final String LOGTAG = "GeckoMenuItemDefault";
 
     private ImageView mIcon;
     private TextView mTitle;
-    private ImageView mCheck;
+    private CheckBox mCheck;
+
+    private boolean mCheckable;
+    private boolean mChecked;
 
     public MenuItemDefault(Context context, AttributeSet attrs) {
         super(context, attrs);
 
         Resources res = context.getResources();
         setLayoutParams(new AbsListView.LayoutParams((int) (res.getDimension(R.dimen.menu_item_row_width)),
                                                      (int) (res.getDimension(R.dimen.menu_item_row_height))));
 
         inflate(context, R.layout.menu_item, this);
         mIcon = (ImageView) findViewById(R.id.icon);
         mTitle = (TextView) findViewById(R.id.title);
-        mCheck = (ImageView) findViewById(R.id.check);
+        mCheck = (CheckBox) findViewById(R.id.check);
+
+        mCheckable = false;
+        mChecked = false;
     }
 
     @Override
     public View getLayout() {
         return this;
     }
 
     @Override
@@ -70,16 +77,18 @@ public class MenuItemDefault extends Lin
         super.setEnabled(enabled);
         mTitle.setEnabled(enabled);
         mCheck.setEnabled(enabled);
         mIcon.setColorFilter(enabled ? 0 : 0xFF999999);
     }
 
     @Override
     public void setCheckable(boolean checkable) {
-        mCheck.setVisibility(checkable ? VISIBLE : GONE);
+        mCheckable = checkable;
+        mCheck.setVisibility(mCheckable ? VISIBLE : GONE);
     }
 
     @Override
     public void setChecked(boolean checked) {
-        mCheck.setVisibility(checked ? VISIBLE : GONE);
+        mChecked = checked;
+        mCheck.setChecked(mChecked);
     }
 }
index 5fa52a90f090b454d46d0daad6dfc61bd95280b4..958251d6b48ff5844854e22f41528f90209df545
GIT binary patch
literal 3149
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
GOZ+Fv9c{e;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..19f04294bedb7e7c7211b3b77ac4d183b0839e22
GIT binary patch
literal 1083
zc$}S6PiWIn7|)yx8Qa053geMo6m9Ze+NMpmy0uNa71mkW!g}yvmb|WEOI}Rg)^y-O
z4?4k<2p&8riU&O?vXcsK2OS79@Tf-*o(AGchM>O8W{Mj-_(<~J_vQEdzVCg1u2-ff
z2K$fqa~wBVn$)Unhv9pqk9}tjZC_*CF<NNQ8fntD?qM!#l35H&wmyfeST{Qt-{Mh@
z>up)}25pq5RD;-p9%6*RcDZnkjs>o6%wq~>@toyk_%AQlcwm_sekNIlWjBvo*5tB>
zYs=GhV|m_COn&Sv7!6crz{XSufxY1PYLMY~?5gY>szn~`K<Ipi{~c7LTmgCFVUQH!
zF#{q5WLZFoq%5N|K!QjTA$#N)N~lR$l~SO)c;?MBn`%`nc6~7^!?!4PRZ(oW+d?}o
z5N}RIilT%zBq_!aF~8$bJ%~B}aAZNlzTsIewTJ^kS)V0~G{f`J6>PU$-Zkv_-9)jJ
ziGl8lNPwbkixJwVRopxn?bkal7OU7Ni=M&i(H#EE)xp#d$f8ltc@`^*zMv6f(Z&uf
zX&IjV5lqWeVK&XOm`cEu1m!eBX_$`ZbH%)-#ie2{2_qZ(af|U(E`hXSA+F^RDj+45
zRkXB}f(k6aY`hS0OO8)<$G{QS`ok?8$W`+m)+zDoge*iIP-ziL{1$ORz9xf{W!<ox
zP;n|OP&ZcWSxeX~dc+1h8CI=*B7kV`%@r*vDRNGev}B&|a?StAn#h6?|7n*<#d<J2
z?lwOYcE<-hY-T(*9KDrIi4B%j(z5m7<JN~~gX>`6@c4>!^V{9^5yig6KRo*B6@Byd
zK3aXevH5)Ca}R?z?tC9vSvlXi_wL5(iQxA8OWQ+;+q1@NKb9Umx_ou&=j%|M=pE|m
X<JOx4r@`9O7onz9nAV=;E?oHq2P#jt
index ef5ce22ed0aa3bece5580813031ad315c9f37e0b..48d2e1e322a2a88222e18f5345c7f0272bdd1faa
GIT binary patch
literal 1938
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
bV}{t0Zg!W2gBovd%U@C~3V}-lW3&DQxqt*O
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f7f033cf5d7cdb9c4cfd97f404fe3f15467c217b
GIT binary patch
literal 1047
zc$}S6J#5oJ6m}GWpj9UZ3KDQ~5dw+WXFG9XtEMFWp^->i(nw^iV_y<0wa?gB;&!Uo
zIuup}%#5&rKw>~$kSYOUVt|E#ofQeBaxQU%pz6TM_T78_zW3g}pRJ{ZYf}@aCm4pA
zs?Qrux=*L?v7_|+WvG3p+bLqU$ujPep&cQn>f#Opb>HrxCbHf2Tf1nMVe);i)h6x6
zb=AQ>XQvo0@k1tEvvWykI|D>O2lc!_W52z6%>vKW*qfyWY=k=Md-EF+THaV_IU55<
zaoM>mU^Y>y0Ur??B>rj;tBJ<$+g0f~Rr4&^hme8B{tl|$SOPkZ5GZj{!GVGRWSJ9+
zC0Q0O0}%=$59uQpgrZuKRj~|4i>2Nox2rY{YvhYc8rvr%RC#_l9CAa6!%>eH6h%pG
zh+=^v3h{bC?4%IHGnoYg#ZKgf#KQqdWxIpdh{m$n75uQ#7#j}aQKD$d_{0u*frGs7
z^BFoOP1HRc9k<p)#5Yll*CL13qdW75tHY@&kVc~}MjkDSy=q`*%|`*L8yZXhaIWX7
zuv(#6EEi!}gmOg?DzGByHA^=PNwjJunAtdpYe{8ADO%8!jG7>rf>N$3Mnx<`1)8ub
znHjep#KaC9lySW=*R&4hs(OTMf}<A3t62vu^)bP5ABR9+mchk_?RY_|xRe%X6f26n
z+sL&d?1TLbtKI<-K;hq;D@I9F<eDKGC7m5{-T%oNPlMtAYL`q!doVqYo1Y5f@j(Hd
znTQU@)5YWW>0p_4quNS7b$;&c&E*TZ6Z!3(4=*;4yrJF|eXH7g|47&w<ldf*-ksb2
wdSlWmOg~?F_VU8x*7=k0?#JDHkh{8>V;(-3{IPrQ%;$7e>*j*-q_%SB7ut43VE_OC
index 464c4522f2f41966653f24f10f809365d88c3db7..3653e72cfebb342b593427ef299e52cd7d2e6576
GIT binary patch
literal 2572
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0c13cae05868f2f497478f543a66394ae1d729c0
GIT binary patch
literal 1072
zc$}S6OK;Oa5OyD+s-g&Pg<iHU5>z67CQfW6gv3s0BvPUz5<x-;$KEuivDesJ;`TzR
zR3uKED#|}VRN@XCIKTzb1CI+rJj4+MEq?&Sy2J%R)dMTryEFd2nb~>Vs7#+489qEr
zQPfCjN~@CnNcaxzCEt(K>MGd|;X(t~Pz!f;4^lZ3H6bY3`V6c>-JHMt6s9R^pl#I~
zxKTc>7|3Sy5W@tvONA?)4P4!rg%~v9jOAqL&4-U@V3`^EY@*DST@|*isRa+#7N+aQ
z!mJ^iboK;D2MRG@L#%_q?l`^@Waurs3OR>rmIhl8Je#3^1=T25fQmc_5{wu#IGzWR
z#PIQiB=N_A!0`ghkw=R0aU~%sLK5^AO}u$#OQ~wbo-ZP0=r+c#!m{0Nm+6WO@@80G
zmgUffAjAkF=FdA=4`Pl#5n0fnZ+MoAE#!bu)|+S!XJ|UQg6)>e+lC##mnf1lHqc#`
zXE@fj*$D09Ds1hJ_UrR5WUJ6ebDlx!(VF<f)$Y^~NTN~Bcor#&-qDaTXF~^<v<yxD
zFs5ZHTrNejn2d8tfs;}^pW;%YnlGxFCJM!Tf{SeI#4U<RS&kRu1yRfMe1VsfIax~y
zNlxYpTuv-R+>+yC-7#RqwSIHOUAc<tK^-Hnj!-A+fJz%-<hPLv)S3j2m36~%Ld9fQ
zpkA!dv#vn1=ph?yWmvIxh=Ak&y}7I<1X;>!f|gL}9@qSztg$2*_OEt{RHO&P<972C
zVS9X_LuSS!!!hxo{e%qGg_4%52XDT-mWL^@PkS+%u5MgidOO*?^=8lcAB)Q?H^-On
z9vnX!TY20+^t^NF{p#(_^!mH68`r&aYtQsMeSQ6dLkGagMe6&v&!hJTvL7m+visMG
cX6)7AC^c5YYuEawUWPMVDoktl@)wtW0!s@}IsgCw
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/drawable/menu_item_checkmark.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_checked="true" android:drawable="@drawable/menu_item_check"/>
+
+    <item android:drawable="@drawable/menu_item_uncheck"/>
+
+</selector>
--- a/mobile/android/base/resources/layout/menu_item.xml
+++ b/mobile/android/base/resources/layout/menu_item.xml
@@ -17,21 +17,22 @@
                android:layout_height="wrap_content"
                android:layout_weight="1.0"
                android:textSize="16sp"
                android:textColor="@color/menu_item_title"
                android:singleLine="true"
                android:ellipsize="middle"
                android:layout_gravity="center_vertical"/>
 
-     <ImageView android:id="@+id/check"
-                android:layout_width="20dp"
-                android:layout_height="14dp"
-                android:paddingLeft="6dp"
-                android:layout_gravity="center_vertical"
-                android:src="@drawable/menu_item_check"
-                android:visibility="gone"/>
+     <CheckBox android:id="@+id/check"
+               android:layout_width="18dp"
+               android:layout_height="18dp"
+               android:layout_gravity="center_vertical"
+               android:button="@drawable/menu_item_checkmark"
+               android:focusable="false"
+               android:clickable="false"
+               android:visibility="gone"/>
 
      <View android:layout_width="14dp"
            android:layout_height="fill_parent"
            android:layout_gravity="center_vertical"/>
 
 </merge>