summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java b/mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java
new file mode 100644
index 000000000..d9fd9ec5a
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/icons/IconRequestBuilder.java
@@ -0,0 +1,143 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; 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.icons;
+
+import android.content.Context;
+import android.support.annotation.CheckResult;
+
+import org.mozilla.gecko.GeckoAppShell;
+
+import ch.boye.httpclientandroidlib.util.TextUtils;
+
+/**
+ * Builder for creating a request to load an icon.
+ */
+public class IconRequestBuilder {
+ private final IconRequest request;
+
+ /* package-private */ IconRequestBuilder(Context context) {
+ this(new IconRequest(context));
+ }
+
+ /* package-private */ IconRequestBuilder(IconRequest request) {
+ this.request = request;
+ }
+
+ /**
+ * Set the URL of the page for which the icon should be loaded.
+ */
+ @CheckResult
+ public IconRequestBuilder pageUrl(String pageUrl) {
+ request.pageUrl = pageUrl;
+ return this;
+ }
+
+ /**
+ * Set whether this request is allowed to load icons from non http(s) URLs (e.g. the omni.ja).
+ *
+ * For example web content referencing internal URLs should not lead to us loading icons from
+ * internal data structures like the omni.ja.
+ */
+ @CheckResult
+ public IconRequestBuilder privileged(boolean privileged) {
+ request.privileged = privileged;
+ return this;
+ }
+
+ /**
+ * Add an icon descriptor describing the location and properties of an icon. All descriptors
+ * will be ranked and tried in order of their rank. Executing the request will modify the list
+ * of icons (filter or add additional descriptors).
+ */
+ @CheckResult
+ public IconRequestBuilder icon(IconDescriptor descriptor) {
+ request.icons.add(descriptor);
+ return this;
+ }
+
+ /**
+ * Skip the network and do not load an icon from a network connection.
+ */
+ @CheckResult
+ public IconRequestBuilder skipNetwork() {
+ request.skipNetwork = true;
+ return this;
+ }
+
+ /**
+ * Skip the disk cache and do not load an icon from disk.
+ */
+ @CheckResult
+ public IconRequestBuilder skipDisk() {
+ request.skipDisk = true;
+ return this;
+ }
+
+ /**
+ * Skip the memory cache and do not return a previously loaded icon.
+ */
+ @CheckResult
+ public IconRequestBuilder skipMemory() {
+ request.skipMemory = true;
+ return this;
+ }
+
+ /**
+ * The icon will be used as (Android) launcher icon. The loaded icon will be scaled to the
+ * preferred Android launcher icon size.
+ */
+ public IconRequestBuilder forLauncherIcon() {
+ request.targetSize = GeckoAppShell.getPreferredIconSize();
+ return this;
+ }
+
+ /**
+ * Execute the callback on the background thread. By default the callback is always executed on
+ * the UI thread in order to add the loaded icon to a view easily.
+ */
+ @CheckResult
+ public IconRequestBuilder executeCallbackOnBackgroundThread() {
+ request.backgroundThread = true;
+ return this;
+ }
+
+ /**
+ * When executing the request then only prepare executing it but do not actually load an icon.
+ * This mode is only used for some legacy code that uses the icon URL and therefore needs to
+ * perform a lookup of the URL but doesn't want to load the icon yet.
+ */
+ public IconRequestBuilder prepareOnly() {
+ request.prepareOnly = true;
+ return this;
+ }
+
+ /**
+ * Return the request built with this builder.
+ */
+ @CheckResult
+ public IconRequest build() {
+ if (TextUtils.isEmpty(request.pageUrl)) {
+ throw new IllegalStateException("Page URL is required");
+ }
+
+ return request;
+ }
+
+ /**
+ * This is a no-op method.
+ *
+ * All builder methods are annotated with @CheckResult to denote that the
+ * methods return the builder object and that it is typically an error to not call another method
+ * on it until eventually calling build().
+ *
+ * However in some situations code can keep a reference
+ * to the builder object and call methods only when a specific event occurs. To make this explicit
+ * and avoid lint errors this method can be called.
+ */
+ public void deferBuild() {
+ // No op
+ }
+}