summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java b/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
new file mode 100644
index 000000000..566422faf
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarkFolderView.java
@@ -0,0 +1,147 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.home;
+
+import org.mozilla.gecko.GeckoProfile;
+import org.mozilla.gecko.R;
+import org.mozilla.gecko.db.BrowserContract;
+import org.mozilla.gecko.db.BrowserDB;
+import org.mozilla.gecko.util.ThreadUtils;
+import org.mozilla.gecko.util.UIAsyncTask;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.lang.ref.WeakReference;
+import java.util.Collections;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class BookmarkFolderView extends LinearLayout {
+ private static final Set<Integer> FOLDERS_WITH_COUNT;
+
+ static {
+ final Set<Integer> folders = new TreeSet<>();
+ folders.add(BrowserContract.Bookmarks.FAKE_READINGLIST_SMARTFOLDER_ID);
+
+ FOLDERS_WITH_COUNT = Collections.unmodifiableSet(folders);
+ }
+
+ public enum FolderState {
+ /**
+ * A standard folder, i.e. a folder in a list of bookmarks and folders.
+ */
+ FOLDER(R.drawable.folder_closed),
+
+ /**
+ * The parent folder: this indicates that you are able to return to the previous
+ * folder ("Back to {name}").
+ */
+ PARENT(R.drawable.bookmark_folder_arrow_up),
+
+ /**
+ * The reading list smartfolder: this displays a reading list icon instead of the
+ * normal folder icon.
+ */
+ READING_LIST(R.drawable.reading_list_folder);
+
+ public final int image;
+
+ FolderState(final int image) { this.image = image; }
+ }
+
+ private final TextView mTitle;
+ private final TextView mSubtitle;
+
+ private final ImageView mIcon;
+
+ public BookmarkFolderView(Context context) {
+ this(context, null);
+ }
+
+ public BookmarkFolderView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ LayoutInflater.from(context).inflate(R.layout.two_line_folder_row, this);
+
+ mTitle = (TextView) findViewById(R.id.title);
+ mSubtitle = (TextView) findViewById(R.id.subtitle);
+ mIcon = (ImageView) findViewById(R.id.icon);
+ }
+
+ public void update(String title, int folderID) {
+ setTitle(title);
+ setID(folderID);
+ }
+
+ private void setTitle(String title) {
+ mTitle.setText(title);
+ }
+
+ private static class ItemCountUpdateTask extends UIAsyncTask.WithoutParams<Integer> {
+ private final WeakReference<TextView> mTextViewReference;
+ private final int mFolderID;
+
+ public ItemCountUpdateTask(final WeakReference<TextView> textViewReference,
+ final int folderID) {
+ super(ThreadUtils.getBackgroundHandler());
+
+ mTextViewReference = textViewReference;
+ mFolderID = folderID;
+ }
+
+ @Override
+ protected Integer doInBackground() {
+ final TextView textView = mTextViewReference.get();
+
+ if (textView == null) {
+ return null;
+ }
+
+ final BrowserDB db = BrowserDB.from(textView.getContext());
+ return db.getBookmarkCountForFolder(textView.getContext().getContentResolver(), mFolderID);
+ }
+
+ @Override
+ protected void onPostExecute(Integer count) {
+ final TextView textView = mTextViewReference.get();
+
+ if (textView == null) {
+ return;
+ }
+
+ final String text;
+ if (count == 1) {
+ text = textView.getContext().getResources().getString(R.string.bookmark_folder_one_item);
+ } else {
+ text = textView.getContext().getResources().getString(R.string.bookmark_folder_items, count);
+ }
+
+ textView.setText(text);
+ textView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private void setID(final int folderID) {
+ if (FOLDERS_WITH_COUNT.contains(folderID)) {
+ final WeakReference<TextView> subTitleReference = new WeakReference<TextView>(mSubtitle);
+
+ new ItemCountUpdateTask(subTitleReference, folderID).execute();
+ } else {
+ mSubtitle.setVisibility(View.GONE);
+ }
+ }
+
+ public void setState(@NonNull FolderState state) {
+ mIcon.setImageResource(state.image);
+ }
+}