Bug 1353019: update menu icon of CustomTabsActivity as per page loading draft
authorJulian_Chu <walkingice0204@gmail.com>
Wed, 19 Apr 2017 11:49:11 +0800
changeset 564995 f2c583315bd0b7fe21534b75e929ee3fe22efff8
parent 564994 3296b6b3c2e78f3ee7814839f878b74c3c596c72
child 624880 2272acf48d417394233b4de878166a50acfff2df
push id54746
push userbmo:walkingice0204@gmail.com
push dateWed, 19 Apr 2017 09:41:41 +0000
bugs1353019
milestone55.0a1
Bug 1353019: update menu icon of CustomTabsActivity as per page loading There is a control in menu for reloading or stop-page-loading. Its icon should be updated per page loading progress. MozReview-Commit-ID: BNanAQj3xS4
mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
mobile/android/base/resources/drawable-hdpi-v11/ic_menu_stop.png
mobile/android/base/resources/drawable-large-hdpi-v11/ic_menu_stop.png
mobile/android/base/resources/drawable-large-xhdpi-v11/ic_menu_stop.png
mobile/android/base/resources/drawable-large-xxhdpi-v11/ic_menu_stop.png
mobile/android/base/resources/drawable-xhdpi-v11/ic_menu_stop.png
mobile/android/base/resources/drawable/customtabs_menu_item_control.xml
mobile/android/base/resources/menu/customtabs_menu.xml
--- a/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
+++ b/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsActivity.java
@@ -59,16 +59,18 @@ public class CustomTabsActivity extends 
     private ProgressBar mProgressView;
     // A state to indicate whether this activity is finishing with customize animation
     private boolean usingCustomAnimation = false;
 
     // Bug 1351605 - getIntent() not always returns the intent which started this activity.
     // Therefore we make a copy in case of this Activity is re-created.
     private Intent startIntent;
 
+    private MenuItem menuItemControl;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         if (savedInstanceState != null) {
             startIntent = savedInstanceState.getParcelable(SAVED_START_INTENT);
         } else {
             Telemetry.sendUIEvent(TelemetryContract.Event.LOAD_URL, TelemetryContract.Method.INTENT, "customtab");
@@ -257,18 +259,18 @@ public class CustomTabsActivity extends 
                 finish();
                 return true;
             case R.id.share:
                 onShareClicked();
                 return true;
             case R.id.custom_tabs_menu_forward:
                 onForwardClicked();
                 return true;
-            case R.id.custom_tabs_menu_reload:
-                onReloadClicked();
+            case R.id.custom_tabs_menu_control:
+                onLoadingControlClicked();
                 return true;
             case R.id.custom_tabs_menu_open_in:
                 onOpenInClicked();
                 return true;
         }
 
         final PendingIntent intent = menuItemsIntent.get(item.getItemId());
         if (intent != null) {
@@ -344,16 +346,18 @@ public class CustomTabsActivity extends 
         if (openItem != null) {
             final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://"));
             final ResolveInfo info = getPackageManager()
                     .resolveActivity(browserIntent, PackageManager.MATCH_DEFAULT_ONLY);
             final String name = info.loadLabel(getPackageManager()).toString();
             openItem.setTitle(getString(R.string.custom_tabs_menu_item_open_in, name));
         }
 
+        menuItemControl = geckoMenu.findItem(R.id.custom_tabs_menu_control);
+
         geckoMenu.addFooterView(
                 getLayoutInflater().inflate(R.layout.customtabs_options_menu_footer, geckoMenu, false),
                 null,
                 false);
 
         return popupMenu;
     }
 
@@ -381,22 +385,34 @@ public class CustomTabsActivity extends 
      */
     private void updateProgress(final boolean isLoading, final int progress) {
         if (isLoading) {
             mProgressView.setVisibility(View.VISIBLE);
             mProgressView.setProgress(progress);
         } else {
             mProgressView.setVisibility(View.GONE);
         }
+
+        if (menuItemControl != null) {
+            Drawable icon = menuItemControl.getIcon();
+            icon.setLevel(progress);
+        }
     }
 
-    private void onReloadClicked() {
+    /**
+     * Call this method to reload page, or stop page loading if progress not complete yet.
+     */
+    private void onLoadingControlClicked() {
         final Tab tab = Tabs.getInstance().getSelectedTab();
         if (tab != null) {
-            tab.doReload(true);
+            if (tab.getLoadProgress() == Tab.LOAD_PROGRESS_STOP) {
+                tab.doReload(true);
+            } else {
+                tab.doStop();
+            }
         }
     }
 
     private void onForwardClicked() {
         final Tab tab = Tabs.getInstance().getSelectedTab();
         if ((tab != null) && tab.canDoForward()) {
             tab.doForward();
         }
new file mode 100644
index 0000000000000000000000000000000000000000..66608d2f6aecdf2b47938ba0319e724563af0bf1
GIT binary patch
literal 1133
zc$@)k1d{uSP)<h;3K|Lk000e1NJLTq002J#002J-1^@s6S6>j{00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11L{dcK~!jg?V3?<6jc<*|K|>DTMDKdpHzquUg(P{UGW1@k;FiF
zC?uM?ZFjp}yG?vBeh%YX7uM~RwmvlJTL~o4)(;>liZ9iK5)vVj7*h<EjaBaPp-$4k
zvORa^-l;YB_qcQS-240Q%+8&Y0X!a$$K&yMJpV7q^b6&3`M{r=&XZP$b-=5Q#~sV_
z^ItYxEUpz7FMih1(bec9&BqD!AQR|?TCMifq=u1vzWB*Iif94AYui3vWugyf>eU}i
zY9(Q?RC$}2=KyqX`}h~7_1USZ+HGkav3x$C?^K!29|0V0a(G>7{hrChaVZqay;`Xy
z0NEyof7Y8D-Ltc^8<JW|I%$yUJcs7u0Fc#+mWM~jPfF{>VR&@BM=Ny`&BX!WNRT=B
zfwZ1jUNaqSJ%YMeKfCEFfZ@^c9@csZz^kpsG59TMO|d+bUfX#Pb+Ohr3Waj7xUPUg
zq1?+_e}f&w0f33`N$ZN`+ZA60AP4|it<=&`sgje{ZpBckl525|KhNF9?+30)Ym4P;
zwc68wxgWr~V0aeHi%A0*Dphh|UW811Jz&0Ia@&=k_5i~0@*Ps@6oB6Z!?R$$G&nN$
zuE`t`gCk=nz<dKDaehonoe9IscTDCm-sAxCKc8q}3_3G2dFfke{lSs369g<u>yrxJ
zzw*_@EouFTSn`0o0MZf%637Gg14vUGNGK233m|QAz=AxGJb>L02Q0}0@dMZ`aloQH
zV18c)(dS_PLOR~|!;@8c!1N4|V)qx1ur3eS4#15#;7A^@6@WW&z@a>lGyu2afMa<e
zZUFAZ0U&T$900z*ed|$A?&Plk&P%^TOqDB>)$0zIwKb3H3C!-}5$XK$PUYi?N9^Hi
zKACvL9{jhrBObAb?(=rVBisaF)W+J0p;9GBz%pdw>mVvZ)Dzt53fpRmMp%=N({r1y
zSEthI2{yyZX`l45)OAnrWh9oj^*p{C0VI;Q-H1p#fY|b`IxuMl5KG>5>nW`OjOEkn
zxup?+k^H~n%aHfzPEXgXD<*Sn$FwKNK;O*drSGKm#qt9KpT4rM{jXI3uS*t^R6N2c
z0K&sSZ+3@a_(W1$yvf<u@pm36ivz%Py}AOT(~#^08E<IpACT6T@9?zfjR&jZ5hejJ
zsbkW*CfnPct|cep5z+t{_(@t*{z4Kq7XZBMl@F)l5rP2L8f`QuttXZb!|(|y)sGhg
zctA>>axES)U9YY%&<Dc9=MJp}%>DBd6Msl+8Q<rN#p0o7s_i3UeH4uQ8|}f@CKK9X
zYaN-7iTO<pb+^$*bGxw)kH_Qjcsw4@e~Etp#bIMnkY>lE00000NkvXXu0mjf1Opm-
new file mode 100644
index 0000000000000000000000000000000000000000..3e6893076dc2f79dbd72b4b81f75f7ff81653efa
GIT binary patch
literal 600
zc$@)P0;m0nP)<h;3K|Lk000e1NJLTq000{R000{Z1^@s6jnwp200004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H10o6%FK~zYIt=6$_6G0Hh@&C+Gr9z?S1t`b~g(ixHAOTul;2dF`
zSfS!csDf-+K4Iq}Kwv<)0utdMk#|UAi$1;`8j9fT-Fbc9@^<Hb8tv|<m1KYawq)7|
z?gL{qI_P(g&Z#)+&6js@SqF&C_?GFcu99gAJOI{!EnGHA8m+hrlr&l~E*k+`z?ujT
zZ&=h*V0&)uy1;N*Fln@6fg!N|--O7v0%x9@rNCSW!1$#O8o;zFSO~!cjb7++ul-w8
z9|03TXrK3*hnq#vUh{B6;G-Y1KhErFzk75pR}0L!A#lrAAR0Y>+kJE5gNo{$v3s0$
zP5~sOa2^bSu3;fyDCEVUbhD?Jy+Y)5&iuq+chGB(=O?@vly#Ul{2i5I;b1XTiY*S7
zLjX}3cJ}k+Vk5qHfylFbi-SShc~|zYm35YP4;RKl_pA(D`DrWy)%P)Jv|@AaQw}u6
ztd2Ll<)%6JJ}<nlVGD%nlYZJ6EEC>A**Jf^L$h?@)X%#|A)r)&LP7cW3L23Ux&}MG
zP@Ny8;jK|kaaq4A1Tg5e#|As(JTY)ts=(c<(1KvBz}Hnk<)D30yQGdV1ZIMKN2A)Z
m&{YtPYQPU*2KK=&<@sOad3wPN_ZF4_0000<MNUMnLSTYRng`qf
new file mode 100644
index 0000000000000000000000000000000000000000..1b321b63ec91db0acf8366d517c1969e601b5829
GIT binary patch
literal 784
zc$@(c1MmEaP)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H10*y&TK~z|Uz1Yoa6Hyev@&CEW8|YRLL2x5!8SBOu5ClbOC}K^9
zB#;E$s&%DHUFt#&_QQn6(yjUog3zR$YAvlO=vxR$j+><PBQta7BR$KRd*}YRcjlbK
z2!LCvxdUNA;2f}NjCr*3?)4WY7{zk!8t?*`M)|8E&s$4xn&Osft_my1#`jcozO~p`
zp9H2*sm_VYDv&*VU7%nF!orw2Sy5RnRH}2Qg#l1_VgxSu%*~2QyI88-OA#~chXFu1
zZ&0=Zo{>Rlrhyt_)_gGlif0BY4}o3?>V1;q8y-_I26~{6GuvAme{znqE65$d_zX6J
z+@6}g^2^)Y_!bc}D=HsCFntuax!m}i0r0w=A2uk2TRCUux7Xd+w!ygNdL9VdnLbLf
zx%{>bkQrUIMG1B&w_MLFYO^y3m?NMxQE@RRKxv?oV8()ypps$$Bw(Ul?ts3ExJLPx
z6cY*>qI^^Rp%~?{z%e%UaqN*D4zJtUu}TU4_h6W3T1$<!u=PSgLzK-s6@&>qrpTZK
zs7RPdpctsg7%U!oa)O%B4`CE)#Cq%~BJGf6o*9L8nTZ98h>4A|0>#9{LWP2cjafSc
z(*p(smzkS6$JzI~ot>cd0$*ykT+dr%={}09qIU`IJhP(GE>!CCL2LT%P@z(tB|>u*
zr631&o?}6_MfG@|iPCxcp-zC}V$wn#0VTzxfjR)Cg-MFaOahYxC2qNTU6D^Am_$Dx
zteZSFH;f{$CW!%PEjHFwbe@nr1%sCcxHw5nB$RN;06!;<u|+BD8AP9+2F3<u;917&
zcD_$J&OUG%<P5MYqW7DNjgM(#M&WfkJ5$qFzk<#noK@IE^g(l}vHl+mkLXCzeumWm
O0000<MNUMnLSTYTj8(z_
new file mode 100644
index 0000000000000000000000000000000000000000..0f17c6b294018bd528a61d17c6ab88fa7d8aab69
GIT binary patch
literal 1206
zc$@*Y1WEgeP)<h;3K|Lk000e1NJLTq001@s001@!1^@s6j74hQ00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11T#rQK~!jg&Du|B9Ay~C@$d6)wwp#s#0vJ%N?N0(C^n{gsJ6v}
zPzbf8!7X|yZXtytj1-mXNmh^1gRqBKrFH!WmNbcfpteV$7Fm_16>_Q+^w3K~O=>oY
z$<FH``zC3-*`0Uhok@PT-JSQH=fmu~?>p~~P))Ay*z;QJw?MiO?iVdrL4VS|d1Eo3
z&-<*Q<nwuT{jVEGMAT6&`bjkZp!wa`^5K`C4g3Tk0I&8PdlStE=Jg#BMq1aWUnvv{
zv&oiUJD%rdCd>bQ1JYCDV=Y?VD4rhpNRAwR?OEUVFH#Ftjc6|5&-4_F#hLg@Zk%j3
zyRN16!Ly)WtaF&wT0f_JU%x{g6o3}?`Kjh1&+{^FOAQ{+^D^sOH;gnu0f-WLTY<kP
zNXG)*6Xm(#)xde4mzgNf4GVM!IbOpa1u7l%1OnZ+r{=!P<#Ns8%d|^2n_V|qo*xW~
zs-{VS{=?=(TG)qb{x%6*z%f-La#e}ur0ofl7;_e5>fUJoQ}c6w2F)Ss_HeGPCEe?K
zDzF_>%Ol8{;;Dg`6+n4n{4nsneJAe6T*xtHDmqVPItP#f7#ka_Jl3&gIGt(P0c^AD
ziw=>dXF7L0advccbl$$0rGy_-0CHX`(+AC5n=)^&HqIpqmcd~4aIR5s7Yvfe#esqv
zFh~v;7YbH@LHxKlQBVg4@!{e|K?4}L$0dPUICa1*6trOwIAC2)^?q(@YRXRn1r{)f
zw$#yZu6n{yZEcrsRxpTm<-*18N|`hqV|ORgn6pke6oi05Qn>Ia2nmC@anVo^0S0m5
zqN5-p3|!;fpuhnPT;bfI0F;YPmLk^E$6`yZL$|HjpNmeSEt8fN<8a40GRzffu^>md
zNHEtZ6BoG9u((hrQE{PQaidJ4;6g5f<42i<#aYc`p66vMDl;Om->y6Wegv)ok6N`7
zI<#u)+Piz#P^na^1Z@_09*eR=E1C;ZndvQ0j`x84VBJ2%j&q<Z7Uk=={Hs)5p$w%n
z_jMBU)?P!HE0lRJDO_EcYm`Y6xD{b>p-ke&)r7^3GKmv+4=gE^NnE%)U`eA);=nD!
zBJa@pGm&l*mvC-&oKuk8wsWJn+)kH#KCiC-ePd{aXOrq?E&jQVFtTOS#+OnLKeFw0
zL5|zDj|&A*DwQgGckddSne)5Ec5MmUCnj!>tF?wQDHIB`Z7u0uv*&LUEpl7|?N*Hv
zK$%3qZB;<vhb)ssnS{hul-B$b<jB=PnS{VyQi6I9(Dja5O_YfRPHQdir><Q7_0P_(
zr>B7zsIgU`k>R$M^r5xz=&bp*oSpX{2e#KZM1wx@#p#c~N&#HC{M*k@?c8|@q#fAA
z!kzUsMBd%H`Jog2{r!<1C32ZksZ=?5VE^E)$$xLk!X*9xFb`Y=-S_#alV1b;4`shJ
UOrLr$2mk;807*qoM6N<$f??}6$^ZZW
new file mode 100644
index 0000000000000000000000000000000000000000..5824f45bd392aad78154948be8a863725f1c655c
GIT binary patch
literal 1301
zc$@(h1?u{VP)<h;3K|Lk000e1NJLTq002|~002}71^@s69BUB400004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11d>TaK~#90?VL|&TtyhbfAe-@t5|IW4JbAVqCzi5L{Jb(iU%)V
zgdj9Yv#skk5xjU26zX0T{BttduvxcV(L(Qv#nR|OJOmm=&<L8Qg+lZaEohU?d*j8G
z5VD(n-^_b&2=lw{%zX2H%(wey-uD(f9*@W4@pwEQkH_Qjcsw3kDANH7ue>^>qv#C{
zPb<ZJM67B!pJ(&^TCH}|#w2YsHul<GJ-0Vs*AXuf(62SWE6uk#^gFd$<$IH{jf75~
zni@m#G0?N~GY!i@$n*93>{XK(wkZ^*26Rq;3F?tuK5nA)<k@QFGwJwZp(jtCJ{kpT
ziCtuF<2t!$<m}wsuhKX+IZ-MdQDJTY^k9c(n~@5J8r6?}lEesPQ-d&2Z_!yMz=Jvr
zE=?4Roh~31CW^&D!r+@dWCGk4=<rQx9I;TPd9JH=(64m<a+Xpjip4>t^OqI$ch^H5
zlg1JYMR8~MP3aGG{_Dw7=^=4EAty?uBZ2O@)V)lA?yqepa-pyqvwiC6A0y3ops!0~
z8VJ?r<Mv21{o|+kc7oW~_J2=lM-^_o3tWlaFNO3Mrg@7W|NiUXd(zlqq4j$GmI`@M
z$4`AoF#Y9e4jNWf$O{)PeDIGnzR7ne_4@2pa?!J(R^s+eVx=0c%xihAj+t&mjJKZ9
z^$l}7tlaz?&f!{4tC3o5<~Nf$fF+@jtyEWJf<>W_jZ~Lpf@PtQu2k1#LIOe|9jPwL
zgoK1bvQk}@2?+{?WTd(*6A~5*cBQ&56H*WgcBE=(x-Jt^5(;LA6|L>9w69iMBaLb`
z_HIr>YC^$yrAkO`WwuCFD5NSib(xTXP)J2;CNd!-p^&K5%w$4_LLm{UnaYHWg@RS7
znaczRgn|{RPRInq6MKhHVLo(Xab!LTiz)9!+0TCaQOaEEe!OkURO)`cvCmBEe%^X!
zB6YtXj-)O%wc94siVoK*RN9e>P#YB;E>)=P5ieP6KDKb7LS-*pen_|LcG7jJu0BTY
zxHorMs*8mVT^)3|D%G`8oLHwuE=qN&SWI*T=bBVk${CH$GhLGELcy(-!(msX8Vhwn
zrlq-9k!mEgP?#EsaxA!1(P3Jl5`+w!)Y*%L9-p4>?b(dJYx7obN0Kg&F_gL-ga@Ch
z*FRjB#1`-6dp300MVSDNYIQ}ctr5wAih@UV?$#M;Y?08>(a{`=@wolcEZj1Y3XCJn
zUXjpzZ*MPfPn<q!SHXdi)O(LlPal@V6bU^9e*(>J+h-xOg;46ojlMq7-+PFJ&dtp=
zfv>u0o2ASa@ujMZ3+3{bB$oI`Dbo53d#q9yWVVPQbyK6?mc|haZPY4@3SOq2RL##p
z$gm4CTQsWGl^|qT!*ZJ@n`lm*o1cySmUWAqv?IXMmBk;1o_O+e&<}tb_;0*F6smF{
zA5F~9SJq6%PlBbT#r4M@d*%~@tpmWrz#YH_s4p~(pR3JYG#TI8;mB~goWFl<?a-$)
zGwXo1HExoW%jMvgwY9r%^!448erI|-9*@W4@pwEQkH_Qjc((B`4C+ecy61J500000
LNkvXXu0mjf>4#&s
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/resources/drawable/customtabs_menu_item_control.xml
@@ -0,0 +1,10 @@
+<?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/. -->
+
+<level-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- before progress to 100, show stop-icon for control  -->
+    <item android:maxLevel="99" android:drawable="@drawable/ic_menu_stop"/>
+    <item android:maxLevel="100" android:drawable="@drawable/ic_menu_reload"/>
+</level-list>
--- a/mobile/android/base/resources/menu/customtabs_menu.xml
+++ b/mobile/android/base/resources/menu/customtabs_menu.xml
@@ -11,18 +11,18 @@
 
     <item
         android:id="@+id/custom_tabs_menu_forward"
         android:icon="@drawable/ic_menu_forward"
         android:showAsAction="always"
         android:title="@string/forward"/>
 
     <item
-        android:id="@+id/custom_tabs_menu_reload"
-        android:icon="@drawable/ic_menu_reload"
+        android:id="@+id/custom_tabs_menu_control"
+        android:icon="@drawable/customtabs_menu_item_control"
         android:showAsAction="always"
-        android:title="@string/share"/>
+        android:title=""/>
 
     <item
         android:id="@+id/custom_tabs_menu_open_in"
         android:title="@string/custom_tabs_menu_item_open_in"/>
 
 </menu>