blob: 8723f708e300955b8b40e567b02cd59aedc61cc7 [file] [log] [blame]
package org.wordpress.android.editor.example;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.DragEvent;
import android.view.MenuItem;
import android.view.View;
import org.wordpress.android.editor.EditorFragmentAbstract;
import org.wordpress.android.editor.EditorFragmentAbstract.EditorDragAndDropListener;
import org.wordpress.android.editor.EditorFragmentAbstract.EditorFragmentListener;
import org.wordpress.android.editor.EditorFragmentAbstract.TrackableEvent;
import org.wordpress.android.editor.EditorMediaUploadListener;
import org.wordpress.android.editor.ImageSettingsDialogFragment;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.wordpress.android.util.ToastUtils;
import org.wordpress.android.util.helpers.MediaFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class EditorExampleActivity extends AppCompatActivity implements EditorFragmentListener,
EditorDragAndDropListener {
public static final String EDITOR_PARAM = "EDITOR_PARAM";
public static final String TITLE_PARAM = "TITLE_PARAM";
public static final String CONTENT_PARAM = "CONTENT_PARAM";
public static final String DRAFT_PARAM = "DRAFT_PARAM";
public static final String TITLE_PLACEHOLDER_PARAM = "TITLE_PLACEHOLDER_PARAM";
public static final String CONTENT_PLACEHOLDER_PARAM = "CONTENT_PLACEHOLDER_PARAM";
public static final int USE_NEW_EDITOR = 1;
public static final int USE_LEGACY_EDITOR = 2;
public static final int ADD_MEDIA_ACTIVITY_REQUEST_CODE = 1111;
public static final int ADD_MEDIA_FAIL_ACTIVITY_REQUEST_CODE = 1112;
public static final int ADD_MEDIA_SLOW_NETWORK_REQUEST_CODE = 1113;
public static final String MEDIA_REMOTE_ID_SAMPLE = "123";
private static final int SELECT_IMAGE_MENU_POSITION = 0;
private static final int SELECT_IMAGE_FAIL_MENU_POSITION = 1;
private static final int SELECT_VIDEO_MENU_POSITION = 2;
private static final int SELECT_VIDEO_FAIL_MENU_POSITION = 3;
private static final int SELECT_IMAGE_SLOW_MENU_POSITION = 4;
private EditorFragmentAbstract mEditorFragment;
private Map<String, String> mFailedUploads;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getIntExtra(EDITOR_PARAM, USE_NEW_EDITOR) == USE_NEW_EDITOR) {
ToastUtils.showToast(this, R.string.starting_new_editor);
setContentView(R.layout.activity_new_editor);
} else {
ToastUtils.showToast(this, R.string.starting_legacy_editor);
setContentView(R.layout.activity_legacy_editor);
}
mFailedUploads = new HashMap<>();
}
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (fragment instanceof EditorFragmentAbstract) {
mEditorFragment = (EditorFragmentAbstract) fragment;
}
}
@Override
public void onBackPressed() {
Fragment fragment = getFragmentManager()
.findFragmentByTag(ImageSettingsDialogFragment.IMAGE_SETTINGS_DIALOG_TAG);
if (fragment != null && fragment.isVisible()) {
((ImageSettingsDialogFragment) fragment).dismissFragment();
} else {
super.onBackPressed();
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.add(0, SELECT_IMAGE_MENU_POSITION, 0, getString(R.string.select_image));
menu.add(0, SELECT_IMAGE_FAIL_MENU_POSITION, 0, getString(R.string.select_image_fail));
menu.add(0, SELECT_VIDEO_MENU_POSITION, 0, getString(R.string.select_video));
menu.add(0, SELECT_VIDEO_FAIL_MENU_POSITION, 0, getString(R.string.select_video_fail));
menu.add(0, SELECT_IMAGE_SLOW_MENU_POSITION, 0, getString(R.string.select_image_slow_network));
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Intent intent = new Intent(Intent.ACTION_PICK);
switch (item.getItemId()) {
case SELECT_IMAGE_MENU_POSITION:
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent = Intent.createChooser(intent, getString(R.string.select_image));
startActivityForResult(intent, ADD_MEDIA_ACTIVITY_REQUEST_CODE);
return true;
case SELECT_IMAGE_FAIL_MENU_POSITION:
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent = Intent.createChooser(intent, getString(R.string.select_image_fail));
startActivityForResult(intent, ADD_MEDIA_FAIL_ACTIVITY_REQUEST_CODE);
return true;
case SELECT_VIDEO_MENU_POSITION:
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent = Intent.createChooser(intent, getString(R.string.select_video));
startActivityForResult(intent, ADD_MEDIA_ACTIVITY_REQUEST_CODE);
return true;
case SELECT_VIDEO_FAIL_MENU_POSITION:
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent = Intent.createChooser(intent, getString(R.string.select_video_fail));
startActivityForResult(intent, ADD_MEDIA_FAIL_ACTIVITY_REQUEST_CODE);
return true;
case SELECT_IMAGE_SLOW_MENU_POSITION:
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent = Intent.createChooser(intent, getString(R.string.select_image_slow_network));
startActivityForResult(intent, ADD_MEDIA_SLOW_NETWORK_REQUEST_CODE);
return true;
default:
return false;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {
return;
}
Uri mediaUri = data.getData();
MediaFile mediaFile = new MediaFile();
String mediaId = String.valueOf(System.currentTimeMillis());
mediaFile.setMediaId(mediaId);
mediaFile.setVideo(mediaUri.toString().contains("video"));
switch (requestCode) {
case ADD_MEDIA_ACTIVITY_REQUEST_CODE:
mEditorFragment.appendMediaFile(mediaFile, mediaUri.toString(), null);
if (mEditorFragment instanceof EditorMediaUploadListener) {
simulateFileUpload(mediaId, mediaUri.toString());
}
break;
case ADD_MEDIA_FAIL_ACTIVITY_REQUEST_CODE:
mEditorFragment.appendMediaFile(mediaFile, mediaUri.toString(), null);
if (mEditorFragment instanceof EditorMediaUploadListener) {
simulateFileUploadFail(mediaId, mediaUri.toString());
}
break;
case ADD_MEDIA_SLOW_NETWORK_REQUEST_CODE:
mEditorFragment.appendMediaFile(mediaFile, mediaUri.toString(), null);
if (mEditorFragment instanceof EditorMediaUploadListener) {
simulateSlowFileUpload(mediaId, mediaUri.toString());
}
break;
}
}
@Override
public void onSettingsClicked() {
// TODO
}
@Override
public void onAddMediaClicked() {
// TODO
}
@Override
public void onMediaRetryClicked(String mediaId) {
if (mFailedUploads.containsKey(mediaId)) {
simulateFileUpload(mediaId, mFailedUploads.get(mediaId));
}
}
@Override
public void onMediaUploadCancelClicked(String mediaId, boolean delete) {
}
@Override
public void onFeaturedImageChanged(long mediaId) {
}
@Override
public void onVideoPressInfoRequested(String videoId) {
}
@Override
public String onAuthHeaderRequested(String url) {
return "";
}
@Override
public void onEditorFragmentInitialized() {
// arbitrary setup
mEditorFragment.setFeaturedImageSupported(true);
mEditorFragment.setBlogSettingMaxImageWidth("600");
mEditorFragment.setDebugModeEnabled(true);
// get title and content and draft switch
String title = getIntent().getStringExtra(TITLE_PARAM);
String content = getIntent().getStringExtra(CONTENT_PARAM);
boolean isLocalDraft = getIntent().getBooleanExtra(DRAFT_PARAM, true);
mEditorFragment.setTitle(title);
mEditorFragment.setContent(content);
mEditorFragment.setTitlePlaceholder(getIntent().getStringExtra(TITLE_PLACEHOLDER_PARAM));
mEditorFragment.setContentPlaceholder(getIntent().getStringExtra(CONTENT_PLACEHOLDER_PARAM));
mEditorFragment.setLocalDraft(isLocalDraft);
}
@Override
public void saveMediaFile(MediaFile mediaFile) {
// TODO
}
@Override
public void onTrackableEvent(TrackableEvent event) {
AppLog.d(T.EDITOR, "Trackable event: " + event);
}
private void simulateFileUpload(final String mediaId, final String mediaUrl) {
Thread thread = new Thread() {
@Override
public void run() {
try {
float count = (float) 0.1;
while (count < 1.1) {
sleep(500);
((EditorMediaUploadListener) mEditorFragment).onMediaUploadProgress(mediaId, count);
count += 0.1;
}
MediaFile mediaFile = new MediaFile();
mediaFile.setMediaId(MEDIA_REMOTE_ID_SAMPLE);
mediaFile.setFileURL(mediaUrl);
((EditorMediaUploadListener) mEditorFragment).onMediaUploadSucceeded(mediaId, mediaFile);
if (mFailedUploads.containsKey(mediaId)) {
mFailedUploads.remove(mediaId);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
private void simulateFileUploadFail(final String mediaId, final String mediaUrl) {
Thread thread = new Thread() {
@Override
public void run() {
try {
float count = (float) 0.1;
while (count < 0.6) {
sleep(500);
((EditorMediaUploadListener) mEditorFragment).onMediaUploadProgress(mediaId, count);
count += 0.1;
}
((EditorMediaUploadListener) mEditorFragment).onMediaUploadFailed(mediaId,
getString(R.string.tap_to_try_again));
mFailedUploads.put(mediaId, mediaUrl);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
private void simulateSlowFileUpload(final String mediaId, final String mediaUrl) {
Thread thread = new Thread() {
@Override
public void run() {
try {
sleep(5000);
float count = (float) 0.1;
while (count < 1.1) {
sleep(2000);
((EditorMediaUploadListener) mEditorFragment).onMediaUploadProgress(mediaId, count);
count += 0.1;
}
MediaFile mediaFile = new MediaFile();
mediaFile.setMediaId(MEDIA_REMOTE_ID_SAMPLE);
mediaFile.setFileURL(mediaUrl);
((EditorMediaUploadListener) mEditorFragment).onMediaUploadSucceeded(mediaId, mediaFile);
if (mFailedUploads.containsKey(mediaId)) {
mFailedUploads.remove(mediaId);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
@Override
public void onMediaDropped(ArrayList<Uri> mediaUri) {
// TODO
}
@Override
public void onRequestDragAndDropPermissions(DragEvent dragEvent) {
// TODO
}
}