Bug 1246243 - Use book icon for reading list folder r=liuche
authorAndrzej Hunt <ahunt@mozilla.com>
Tue, 12 Apr 2016 14:47:24 -0700
changeset 331625 98e3ee7643cd665502c97d96b8c6f8369c781b5b
parent 331624 ae63d8eb0e4a110e3019f6a084117102cf850d49
child 331626 9c7198e76b2d254ae90b9e3cca60e808ed35a30e
push id6048
push userkmoir@mozilla.com
push dateMon, 06 Jun 2016 19:02:08 +0000
treeherdermozilla-beta@46d72a56c57d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersliuche
bugs1246243
milestone48.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1246243 - Use book icon for reading list folder r=liuche This approach is extensible and would allow easy addition of special icons for e.g. the screenshots folder. MozReview-Commit-ID: 44yWq85x2HG
mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java
mobile/android/base/resources/drawable-hdpi/reading_list_folder.png
mobile/android/base/resources/drawable-xhdpi/reading_list_folder.png
mobile/android/base/resources/drawable-xxhdpi/reading_list_folder.png
mobile/android/base/resources/drawable/bookmark_folder.xml
mobile/android/base/resources/values/attrs.xml
--- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
@@ -3,53 +3,71 @@
  * 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/. */
 
 package org.mozilla.gecko.home;
 
 import org.mozilla.gecko.R;
 
 import android.content.Context;
+import android.support.annotation.NonNull;
 import android.util.AttributeSet;
 import android.widget.TextView;
 
 public class BookmarkFolderView extends TextView {
-    private static final int[] STATE_OPEN = { R.attr.state_open };
+    public enum FolderState {
+        /**
+         * A standard folder, i.e. a folder in a list of bookmarks and folders.
+         */
+        FOLDER(0),
+
+        /**
+         * The parent folder: this indicates that you are able to return to the previous
+         * folder ("Back to {name}").
+         */
+        PARENT(R.attr.parent),
 
-    private boolean mIsOpen;
+        /**
+         * The reading list smartfolder: this displays a reading list icon instead of the
+         * normal folder icon.
+         */
+        READING_LIST(R.attr.reading_list);
+
+        public final int state;
+
+        FolderState(final int state) { this.state = state; }
+    }
+
+    private FolderState mState;
 
     public BookmarkFolderView(Context context) {
         super(context);
+        mState = FolderState.FOLDER;
     }
 
     public BookmarkFolderView(Context context, AttributeSet attrs) {
         super(context, attrs);
+        mState = FolderState.FOLDER;
     }
 
     public BookmarkFolderView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+        mState = FolderState.FOLDER;
     }
 
     @Override
     public int[] onCreateDrawableState(int extraSpace) {
         final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
 
-        if (mIsOpen) {
-            mergeDrawableStates(drawableState, STATE_OPEN);
+        if (mState != null && mState != FolderState.FOLDER) {
+            mergeDrawableStates(drawableState, new int[] {  mState.state });
         }
 
         return drawableState;
     }
 
-    public void open() {
-        if (!mIsOpen) {
-            mIsOpen = true;
-            refreshDrawableState();
-        }
-    }
-
-    public void close() {
-        if (mIsOpen) {
-            mIsOpen = false;
+    public void setState(@NonNull FolderState state) {
+        if (state != mState) {
+            mState = state;
             refreshDrawableState();
         }
     }
 }
--- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java
@@ -6,16 +6,17 @@
 package org.mozilla.gecko.home;
 
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.db.BrowserContract.Bookmarks;
+import org.mozilla.gecko.home.BookmarkFolderView.FolderState;
 
 import android.content.Context;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.view.View;
 
@@ -324,16 +325,22 @@ class BookmarksListAdapter extends Multi
         } else if (viewType == VIEW_TYPE_BOOKMARK_ITEM) {
             final TwoLinePageRow row = (TwoLinePageRow) view;
             row.updateFromCursor(cursor);
         } else {
             final BookmarkFolderView row = (BookmarkFolderView) view;
             if (cursor == null) {
                 final Resources res = context.getResources();
                 row.setText(res.getString(R.string.home_move_back_to_filter, mParentStack.get(1).title));
-                row.open();
+                row.setState(FolderState.PARENT);
             } else {
                 row.setText(getFolderTitle(context, cursor));
-                row.close();
+
+                int id = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID));
+                if (id == Bookmarks.FAKE_READINGLIST_SMARTFOLDER_ID) {
+                    row.setState(FolderState.READING_LIST);
+                } else {
+                    row.setState(FolderState.FOLDER);
+                }
             }
         }
     }
 }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..052994110de4bc328d462825e068bdea5a120e7e
GIT binary patch
literal 424
zc%17D@N?(olHy`uVBq!ia0vp^DnKmF!3-poKi$0qq!^2X+?^QKos)S9<a7o2gt!9f
z|Np^g6~q7i4F6|>8MDERsSN*TF#MkeMsPN=2r>iCg|M*-B1@rZoXYTcL-+!qYjjJ3
z{DK)6nV4Bv*~B$8wTvwsJ-q$n6O+^G8rmjLnZA78;iJbcUcUDH^_y?sfBpXR_g}#_
zQz@Xv$(}BbAr*{o&$%`o2@qfkc$8UQ-e2>se$U6w-EV%aUCr?2T+_benR<yuJGiTk
zZ0+Y(zNYOKqbQ-6<Hj+e#odU_y2#u>rNX1iecn@{`<wbpbl-OT7YO~PvFhpK?;p(C
zy*Dk&nzb&Q%QJ#!*W3031@*}jT9uW>xZPwfSVo;mkv)4tsQB@OciXg;FTeOHrF^}l
bZH51VLMMr(VIKd0&SUU&^>bP0l+XkKd7Zr?
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c7ad1cade1daceaae3716637e0fa2b35cf1a9b56
GIT binary patch
literal 542
zc%17D@N?(olHy`uVBq!ia0vp^20*OB!3-pS%=WYZQjEnx?oJHr&dIz4at;Legt!9f
z|Np^g6~q7i4F6|>8QU2C&j&Mr+(iuk=Q8|X!tj4Km<vR6z~po=IStI10VaX$sW1}4
zg^NHKQ!xZF5vJ5sB)w?lR0iqC3w8kgU|$mC7tFxO#LU9V#?HaX#m&nnBd4rlWM*#f
z<lz$#l$e~FT~t!q)iZg~;&q$1?LBbx)Wyr!Z``{7@Y#!3pTB<l{^QqQuF|^gK%)+N
zx;TbZFuuLOJn2Y+1j_}vW8aJ<Z-?FgAF}#TM($quqx}M0$?u~3XNgNG%r|e-em8qs
zib&=B#--&I^M%y*gs(nV?R!xC(B19sM$MnPVx}?&ADZ`@`JKh&&SvZLJPslcSsA}q
zRx^~>)E-dh{kwnZf8E;c4Iyf?Pd{aK6k%07Eq&v|g<atv3lFdVa?NJT!G`ad(r&ZA
zzf^v>cUSDa*FrB-Has-WWh<0AF0%fVwQ2lO<5uIMx+d`r;@;x=MOAITW0}A7uc&PB
Sbd&*lhQZU-&t;ucLK6T}K=<JQ
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c29d1b9a5747418638e0dfbd84f66a152ef13711
GIT binary patch
literal 726
zc%17D@N?(olHy`uVBq!ia0vp^9zbly!3-pWrS*>hDaPU;cPEB*=VV?2*-QaGA+A8d
z|Np^g6~q7i4F6|>8QU2C&j&Mr+(lppkUNdx|3ZfUv%!KuG!;zF0+Z8VA~P8NPlqw4
zf!Wi*T!<iCWI7B@gNZ{(I3mcMillKWhB?RzFx5{(kutx`yA&7-p(R0n!N5RaW?^Mx
z=iubx<`EDS7MGOM)HN_NHg^mO3y+LXNKDSm$}KFasBLNM>7O`z-h#!e*R0*RbI-m*
zM^2tTd;a33n|JTsfBfX>^A|7Qeg5+8`;VW$|NJx3O}`5aZbeTQ$B+ufx0jd~B?k(y
zT<Drxb8K7gZNIAj-jYZ5CGXqZ5N4|IB~+~B@~ZH27FTZs+`6>%+@!pyYt2RuAxqky
zB`O~H?EhlnES|cglc!lVlQ<W7`7nwbUfrm&>}SV}X$$08wlqewtO^e<a+K~~@-kHQ
zfbJV7=~*1LLKhPrTXQk?eZ9r_r@^V?=!ax3Tid@2oDSq`yM*s>dXrq-x}*Jx+@xxc
zbpqer{}(ClbI=g-UJ^7jW?_KFRIgSiH7nhc+pFR^Bw20<NI13r>w0&1f?ReK<AGaC
zj<cN*^bS(;6!I1mOX_m#JjtQ*g1v*eLDhW8d!sWmKTe2vo_E>t`s(QqXLrUV-<nam
z<cHmR*<VZ6A1|-Y6WAK}fq9Q_dek3*GWHvGOpzjAPB-YUkpjjBgQu&X%Q~loCIBFk
BPn`e&
--- a/mobile/android/base/resources/drawable/bookmark_folder.xml
+++ b/mobile/android/base/resources/drawable/bookmark_folder.xml
@@ -2,15 +2,19 @@
 <!-- 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"
           xmlns:gecko="http://schemas.android.com/apk/res-auto">
 
     <!-- state open -->
-    <item gecko:state_open="true"
+    <item gecko:parent="true"
           android:drawable="@drawable/bookmark_folder_arrow_up"/>
 
+    <!-- reading list folder -->
+    <item gecko:reading_list="true"
+          android:drawable="@drawable/reading_list_folder"/>
+
     <!-- state close -->
     <item android:drawable="@drawable/folder_closed"/>
 
 </selector>
--- a/mobile/android/base/resources/values/attrs.xml
+++ b/mobile/android/base/resources/values/attrs.xml
@@ -132,17 +132,18 @@
 
     <declare-styleable name="FadedMultiColorTextView">
         <!-- The background color we should be fading over. Useful because the
              background is full alpha and we need to copy the background underneath. -->
         <attr name="fadeBackgroundColor" format="dimension"/>
     </declare-styleable>
 
     <declare-styleable name="BookmarkFolderView">
-        <attr name="state_open" format="boolean"/>
+        <attr name="parent" format="boolean"/>
+        <attr name="reading_list" format="boolean"/>
     </declare-styleable>
 
     <declare-styleable name="IconTabWidget">
         <attr name="android:layout"/>
 
         <!-- Sets the tab's content type. Defaults to icon. -->
         <attr name="display">
             <enum name="icon" value="0x00" />