diff --git a/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java b/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java index a024b4601bb1..f7d004501601 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java @@ -8,47 +8,65 @@ 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), - private boolean mIsOpen; + /** + * The parent folder: this indicates that you are able to return to the previous + * folder ("Back to {name}"). + */ + PARENT(R.attr.parent), + + /** + * 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(); } } diff --git a/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java b/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java index 959e15db968d..f8d96e62e2ed 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarksListAdapter.java @@ -11,6 +11,7 @@ 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; @@ -329,10 +330,16 @@ class BookmarksListAdapter extends MultiTypeCursorAdapter { 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); + } } } } diff --git a/mobile/android/base/resources/drawable-hdpi/reading_list_folder.png b/mobile/android/base/resources/drawable-hdpi/reading_list_folder.png new file mode 100644 index 000000000000..052994110de4 Binary files /dev/null and b/mobile/android/base/resources/drawable-hdpi/reading_list_folder.png differ diff --git a/mobile/android/base/resources/drawable-xhdpi/reading_list_folder.png b/mobile/android/base/resources/drawable-xhdpi/reading_list_folder.png new file mode 100644 index 000000000000..c7ad1cade1da Binary files /dev/null and b/mobile/android/base/resources/drawable-xhdpi/reading_list_folder.png differ diff --git a/mobile/android/base/resources/drawable-xxhdpi/reading_list_folder.png b/mobile/android/base/resources/drawable-xxhdpi/reading_list_folder.png new file mode 100644 index 000000000000..c29d1b9a5747 Binary files /dev/null and b/mobile/android/base/resources/drawable-xxhdpi/reading_list_folder.png differ diff --git a/mobile/android/base/resources/drawable/bookmark_folder.xml b/mobile/android/base/resources/drawable/bookmark_folder.xml index 6bd505167e0b..9900c5ed5e6f 100644 --- a/mobile/android/base/resources/drawable/bookmark_folder.xml +++ b/mobile/android/base/resources/drawable/bookmark_folder.xml @@ -7,9 +7,13 @@ xmlns:gecko="http://schemas.android.com/apk/res-auto"> - + + + diff --git a/mobile/android/base/resources/values/attrs.xml b/mobile/android/base/resources/values/attrs.xml index fd2da3dd438b..4b98e8a7e21a 100644 --- a/mobile/android/base/resources/values/attrs.xml +++ b/mobile/android/base/resources/values/attrs.xml @@ -137,7 +137,8 @@ - + +