diff options
Diffstat (limited to 'libs/editor/example/src/main/java/org/wordpress/android')
2 files changed, 434 insertions, 0 deletions
diff --git a/libs/editor/example/src/main/java/org/wordpress/android/editor/example/EditorExampleActivity.java b/libs/editor/example/src/main/java/org/wordpress/android/editor/example/EditorExampleActivity.java new file mode 100644 index 000000000..8723f708e --- /dev/null +++ b/libs/editor/example/src/main/java/org/wordpress/android/editor/example/EditorExampleActivity.java @@ -0,0 +1,348 @@ +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 + } +} diff --git a/libs/editor/example/src/main/java/org/wordpress/android/editor/example/MainExampleActivity.java b/libs/editor/example/src/main/java/org/wordpress/android/editor/example/MainExampleActivity.java new file mode 100644 index 000000000..52b522d38 --- /dev/null +++ b/libs/editor/example/src/main/java/org/wordpress/android/editor/example/MainExampleActivity.java @@ -0,0 +1,86 @@ +package org.wordpress.android.editor.example; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; + +import org.wordpress.android.editor.Utils; +import org.wordpress.android.editor.example.EditorExampleActivity; + +public class MainExampleActivity extends AppCompatActivity { + private Activity mActivity; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mActivity = this; + setContentView(R.layout.activity_example); + + Button newEditorPost1 = (Button) findViewById(R.id.new_editor_post_1); + newEditorPost1.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + Intent intent = new Intent(MainExampleActivity.this, EditorExampleActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(EditorExampleActivity.TITLE_PARAM, getString(R.string.example_post_visual_title)); + bundle.putString(EditorExampleActivity.CONTENT_PARAM, Utils.getHtmlFromFile(mActivity, + "example/example-content.html")); + bundle.putString(EditorExampleActivity.TITLE_PLACEHOLDER_PARAM, + getString(R.string.example_post_title_placeholder)); + bundle.putString(EditorExampleActivity.CONTENT_PLACEHOLDER_PARAM, + getString(R.string.example_post_content_placeholder)); + bundle.putInt(EditorExampleActivity.EDITOR_PARAM, EditorExampleActivity.USE_NEW_EDITOR); + intent.putExtras(bundle); + startActivity(intent); + } + }); + + Button newEditorPostEmpty = (Button) findViewById(R.id.new_editor_post_empty); + newEditorPostEmpty.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + Intent intent = new Intent(MainExampleActivity.this, EditorExampleActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(EditorExampleActivity.TITLE_PARAM, ""); + bundle.putString(EditorExampleActivity.CONTENT_PARAM, ""); + bundle.putString(EditorExampleActivity.TITLE_PLACEHOLDER_PARAM, + getString(R.string.example_post_title_placeholder)); + bundle.putString(EditorExampleActivity.CONTENT_PLACEHOLDER_PARAM, + getString(R.string.example_post_content_placeholder)); + bundle.putInt(EditorExampleActivity.EDITOR_PARAM, EditorExampleActivity.USE_NEW_EDITOR); + intent.putExtras(bundle); + startActivity(intent); + } + }); + + Button legacyEditorPost1Local = (Button) findViewById(R.id.legacy_editor_post_1_local); + legacyEditorPost1Local.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + Intent intent = new Intent(MainExampleActivity.this, EditorExampleActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(EditorExampleActivity.TITLE_PARAM, getString(R.string.example_post_1_title)); + bundle.putString(EditorExampleActivity.CONTENT_PARAM, getString(R.string.example_post_1_content)); + bundle.putInt(EditorExampleActivity.EDITOR_PARAM, EditorExampleActivity.USE_LEGACY_EDITOR); + bundle.putBoolean(EditorExampleActivity.DRAFT_PARAM, true); + intent.putExtras(bundle); + startActivity(intent); + } + }); + + Button legacyEditorPost1Remote = (Button) findViewById(R.id.legacy_editor_post_1_remote); + legacyEditorPost1Remote.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + Intent intent = new Intent(MainExampleActivity.this, EditorExampleActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(EditorExampleActivity.TITLE_PARAM, getString(R.string.example_post_1_title)); + bundle.putString(EditorExampleActivity.CONTENT_PARAM, getString(R.string.example_post_1_content)); + bundle.putInt(EditorExampleActivity.EDITOR_PARAM, EditorExampleActivity.USE_LEGACY_EDITOR); + bundle.putBoolean(EditorExampleActivity.DRAFT_PARAM, false); + intent.putExtras(bundle); + startActivity(intent); + } + }); + } +} |