summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java b/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java
new file mode 100644
index 000000000..768176d63
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/ShareMethod.java
@@ -0,0 +1,82 @@
+/*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.overlays.service.sharemethods;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+import org.mozilla.gecko.overlays.service.ShareData;
+
+/**
+ * Represents a method of sharing a URL/title. Add a bookmark? Send to a device? Add to reading list?
+ */
+public abstract class ShareMethod {
+ protected final Context context;
+
+ public ShareMethod(Context aContext) {
+ context = aContext;
+ }
+
+ /**
+ * Perform a share for the given title/URL combination. Called on the background thread by the
+ * handler service when a request is made. The "extra" parameter is provided should a ShareMethod
+ * desire to handle the share differently based on some additional parameters.
+ *
+ * @param title The page title for the page being shared. May be null if none can be found.
+ * @param url The URL of the page to be shared. Never null.
+ * @param extra A Parcelable of ShareMethod-specific parameters that may be provided by the
+ * caller. Generally null, but this field may be used to provide extra input to
+ * the ShareMethod (such as the device to share to in the case of SendTab).
+ * @return true if the attempt to share was a success. False in the event of an error.
+ */
+ public abstract Result handle(ShareData shareData);
+
+ /**
+ * Enum representing the possible results of performing a share.
+ */
+ public static enum Result {
+ // Victory!
+ SUCCESS,
+
+ // Failure, but retrying the same action again might lead to success.
+ TRANSIENT_FAILURE,
+
+ // Failure, and you're not going to succeed until you reinitialise the ShareMethod (ie.
+ // until you repeat the entire share action). Examples include broken Sync accounts, or
+ // Sync accounts with no valid target devices (so the only way to fix this is to add some
+ // and try again: pushing a retry button isn't sane).
+ PERMANENT_FAILURE
+ }
+
+ /**
+ * Enum representing types of ShareMethod. Parcelable so it may be efficiently used in Intents.
+ */
+ public static enum Type implements Parcelable {
+ ADD_BOOKMARK,
+ SEND_TAB;
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(final Parcel dest, final int flags) {
+ dest.writeInt(ordinal());
+ }
+
+ public static final Creator<Type> CREATOR = new Creator<Type>() {
+ @Override
+ public Type createFromParcel(final Parcel source) {
+ return Type.values()[source.readInt()];
+ }
+
+ @Override
+ public Type[] newArray(final int size) {
+ return new Type[size];
+ }
+ };
+ }
+}