package org.wordpress.android.editor;
import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.text.Spanned;
import android.view.DragEvent;
import com.android.volley.toolbox.ImageLoader;
import org.wordpress.android.editor.EditorFragment.IllegalEditorStateException;
import org.wordpress.android.util.helpers.MediaFile;
import org.wordpress.android.util.helpers.MediaGallery;
import java.util.ArrayList;
import java.util.HashMap;
public abstract class EditorFragmentAbstract extends Fragment {
public abstract void setTitle(CharSequence text);
public abstract void setContent(CharSequence text);
public abstract CharSequence getTitle() throws IllegalEditorStateException;
public abstract CharSequence getContent() throws IllegalEditorStateException;
public abstract void appendMediaFile(MediaFile mediaFile, String imageUrl, ImageLoader imageLoader);
public abstract void appendGallery(MediaGallery mediaGallery);
public abstract void setUrlForVideoPressId(String videoPressId, String url, String posterUrl);
public abstract boolean isUploadingMedia();
public abstract boolean isActionInProgress();
public abstract boolean hasFailedMediaUploads();
public abstract void removeAllFailedMediaUploads();
public abstract void setTitlePlaceholder(CharSequence text);
public abstract void setContentPlaceholder(CharSequence text);
// TODO: remove this as soon as we can (we'll need to drop the legacy editor or fix html2spanned translation)
public abstract Spanned getSpannedContent();
public enum MediaType {
IMAGE, VIDEO;
public static MediaType fromString(String value) {
if (value != null) {
for (MediaType mediaType : MediaType.values()) {
if (value.equalsIgnoreCase(mediaType.toString())) {
return mediaType;
}
}
}
return null;
}
}
protected static final String ARG_PARAM_TITLE = "param_title";
protected static final String ARG_PARAM_CONTENT = "param_content";
protected static final String ATTR_ALIGN = "align";
protected static final String ATTR_ALT = "alt";
protected static final String ATTR_CAPTION = "caption";
protected static final String ATTR_CONTENT = "content";
protected static final String ATTR_DIMEN_HEIGHT = "height";
protected static final String ATTR_DIMEN_WIDTH = "width";
protected static final String ATTR_ID = "id";
protected static final String ATTR_ID_ATTACHMENT = "attachment_id";
protected static final String ATTR_ID_IMAGE_REMOTE = "imageRemoteId";
protected static final String ATTR_SRC = "src";
protected static final String ATTR_STATUS_FAILED = "failed";
protected static final String ATTR_STATUS_UPLOADING = "uploading";
protected static final String ATTR_TITLE = "title";
protected static final String ATTR_URL_LINK = "linkUrl";
protected static final String EXTRA_ENABLED_AZTEC = "isAztecEnabled";
protected static final String EXTRA_FEATURED = "isFeatured";
protected static final String EXTRA_HEADER = "headerMap";
protected static final String EXTRA_IMAGE_FEATURED = "featuredImageSupported";
protected static final String EXTRA_IMAGE_META = "imageMeta";
protected static final String EXTRA_MAX_WIDTH = "maxWidth";
private static final String FEATURED_IMAGE_SUPPORT_KEY = "featured-image-supported";
private static final String FEATURED_IMAGE_WIDTH_KEY = "featured-image-width";
protected EditorFragmentListener mEditorFragmentListener;
protected EditorDragAndDropListener mEditorDragAndDropListener;
protected boolean mFeaturedImageSupported;
protected long mFeaturedImageId;
protected String mBlogSettingMaxImageWidth;
protected ImageLoader mImageLoader;
protected boolean mDebugModeEnabled;
protected HashMap<String, String> mCustomHttpHeaders;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mEditorFragmentListener = (EditorFragmentListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement EditorFragmentListener");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(FEATURED_IMAGE_SUPPORT_KEY, mFeaturedImageSupported);
outState.putString(FEATURED_IMAGE_WIDTH_KEY, mBlogSettingMaxImageWidth);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(FEATURED_IMAGE_SUPPORT_KEY)) {
mFeaturedImageSupported = savedInstanceState.getBoolean(FEATURED_IMAGE_SUPPORT_KEY);
}
if (savedInstanceState.containsKey(FEATURED_IMAGE_WIDTH_KEY)) {
mBlogSettingMaxImageWidth = savedInstanceState.getString(FEATURED_IMAGE_WIDTH_KEY);
}
}
}
public void setImageLoader(ImageLoader imageLoader) {
mImageLoader = imageLoader;
}
public void setFeaturedImageSupported(boolean featuredImageSupported) {
mFeaturedImageSupported = featuredImageSupported;
}
public void setFeaturedImageId(long featuredImageId) {
mFeaturedImageId = featuredImageId;
}
public void setCustomHttpHeader(String name, String value) {
if (mCustomHttpHeaders == null) {
mCustomHttpHeaders = new HashMap<>();
}
mCustomHttpHeaders.put(name, value);
}
public void setDebugModeEnabled(boolean debugModeEnabled) {
mDebugModeEnabled = debugModeEnabled;
}
/**
* Called by the activity when back button is pressed.
*/
public boolean onBackPressed() {
return false;
}
/**
* The editor may need to differentiate local draft and published articles
*
* @param isLocalDraft edited post is a local draft
*/
public void setLocalDraft(boolean isLocalDraft) {
// Not unused in the new editor
}
/**
* Callbacks used to communicate with the parent Activity
*/
public interface EditorFragmentListener {
void onEditorFragmentInitialized();
void onSettingsClicked();
void onAddMediaClicked();
void onMediaRetryClicked(String mediaId);
void onMediaUploadCancelClicked(String mediaId, boolean delete);
void onFeaturedImageChanged(long mediaId);
void onVideoPressInfoRequested(String videoId);
String onAuthHeaderRequested(String url);
// TODO: remove saveMediaFile, it's currently needed for the legacy editor
void saveMediaFile(MediaFile mediaFile);
void onTrackableEvent(TrackableEvent event);
}
/**
* Callbacks for drag and drop support
*/
public interface EditorDragAndDropListener {
void onMediaDropped(ArrayList<Uri> mediaUri);
void onRequestDragAndDropPermissions(DragEvent dragEvent);
}
public enum TrackableEvent {
HTML_BUTTON_TAPPED,
UNLINK_BUTTON_TAPPED,
LINK_BUTTON_TAPPED,
MEDIA_BUTTON_TAPPED,
IMAGE_EDITED,
BOLD_BUTTON_TAPPED,
ITALIC_BUTTON_TAPPED,
OL_BUTTON_TAPPED,
UL_BUTTON_TAPPED,
BLOCKQUOTE_BUTTON_TAPPED,
STRIKETHROUGH_BUTTON_TAPPED,
UNDERLINE_BUTTON_TAPPED,
MORE_BUTTON_TAPPED
}
}