Merge "Delete EditStyledText" into main
diff --git a/common/java/com/android/ex/editstyledtext/EditStyledText.java b/common/java/com/android/ex/editstyledtext/EditStyledText.java
deleted file mode 100644
index 45bbf17..0000000
--- a/common/java/com/android/ex/editstyledtext/EditStyledText.java
+++ /dev/null
@@ -1,3355 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.ex.editstyledtext;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import com.android.ex.editstyledtext.EditStyledText.EditModeActions.EditModeActionBase;
-import com.android.ex.editstyledtext.EditStyledText.EditStyledTextSpans.HorizontalLineSpan;
-import com.android.ex.editstyledtext.EditStyledText.EditStyledTextSpans.MarqueeSpan;
-import com.android.ex.editstyledtext.EditStyledText.EditStyledTextSpans.RescalableImageSpan;
-
-import android.R;
-import android.app.AlertDialog;
-import android.app.AlertDialog.Builder;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.ShapeDrawable;
-import android.graphics.drawable.shapes.RectShape;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.ResultReceiver;
-import android.text.ClipboardManager;
-import android.text.Editable;
-import android.text.Html;
-import android.text.Layout;
-import android.text.NoCopySpan;
-import android.text.NoCopySpan.Concrete;
-import android.text.Selection;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextPaint;
-import android.text.Html.ImageGetter;
-import android.text.Html.TagHandler;
-import android.text.method.ArrowKeyMovementMethod;
-import android.text.style.AbsoluteSizeSpan;
-import android.text.style.AlignmentSpan;
-import android.text.style.BackgroundColorSpan;
-import android.text.style.CharacterStyle;
-import android.text.style.DynamicDrawableSpan;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.ImageSpan;
-import android.text.style.ParagraphStyle;
-import android.text.style.QuoteSpan;
-import android.text.style.UnderlineSpan;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputConnection;
-import android.view.inputmethod.InputConnectionWrapper;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-/**
- * EditStyledText extends EditText for managing the flow and status to edit the styled text. This
- * manages the states and flows of editing, supports inserting image, import/export HTML.
- */
-public class EditStyledText extends EditText {
-
- private static final String TAG = "EditStyledText";
- /**
- * DBG should be false at checking in.
- */
- private static final boolean DBG = true;
-
- /**
- * Modes of editing actions.
- */
- /** The mode that no editing action is done. */
- public static final int MODE_NOTHING = 0;
- /** The mode of copy. */
- public static final int MODE_COPY = 1;
- /** The mode of paste. */
- public static final int MODE_PASTE = 2;
- /** The mode of changing size. */
- public static final int MODE_SIZE = 3;
- /** The mode of changing color. */
- public static final int MODE_COLOR = 4;
- /** The mode of selection. */
- public static final int MODE_SELECT = 5;
- /** The mode of changing alignment. */
- public static final int MODE_ALIGN = 6;
- /** The mode of changing cut. */
- public static final int MODE_CUT = 7;
- public static final int MODE_TELOP = 8;
- public static final int MODE_SWING = 9;
- public static final int MODE_MARQUEE = 10;
- public static final int MODE_SELECTALL = 11;
- public static final int MODE_HORIZONTALLINE = 12;
- public static final int MODE_STOP_SELECT = 13;
- public static final int MODE_CLEARSTYLES = 14;
- public static final int MODE_IMAGE = 15;
- public static final int MODE_BGCOLOR = 16;
- public static final int MODE_PREVIEW = 17;
- public static final int MODE_CANCEL = 18;
- public static final int MODE_TEXTVIEWFUNCTION = 19;
- public static final int MODE_START_EDIT = 20;
- public static final int MODE_END_EDIT = 21;
- public static final int MODE_RESET = 22;
- public static final int MODE_SHOW_MENU = 23;
-
- /**
- * States of selection.
- */
- /** The state that selection isn't started. */
- public static final int STATE_SELECT_OFF = 0;
- /** The state that selection is started. */
- public static final int STATE_SELECT_ON = 1;
- /** The state that selection is done, but not fixed. */
- public static final int STATE_SELECTED = 2;
- /** The state that selection is done and not fixed. */
- public static final int STATE_SELECT_FIX = 3;
-
- /**
- * Help message strings.
- */
- public static final int HINT_MSG_NULL = 0;
- public static final int HINT_MSG_COPY_BUF_BLANK = 1;
- public static final int HINT_MSG_SELECT_START = 2;
- public static final int HINT_MSG_SELECT_END = 3;
- public static final int HINT_MSG_PUSH_COMPETE = 4;
- public static final int HINT_MSG_BIG_SIZE_ERROR = 5;
- public static final int HINT_MSG_END_PREVIEW = 6;
- public static final int HINT_MSG_END_COMPOSE = 7;
-
- /**
- * Fixed Values.
- */
- public static final int DEFAULT_TRANSPARENT_COLOR = 0x00FFFFFF;
- public static final int DEFAULT_FOREGROUND_COLOR = 0xFF000000;
- public static final char ZEROWIDTHCHAR = '\u2060';
- public static final char IMAGECHAR = '\uFFFC';
- private static final int ID_SELECT_ALL = android.R.id.selectAll;
- private static final int ID_START_SELECTING_TEXT = android.R.id.startSelectingText;
- private static final int ID_STOP_SELECTING_TEXT = android.R.id.stopSelectingText;
- private static final int ID_PASTE = android.R.id.paste;
- private static final int ID_COPY = android.R.id.copy;
- private static final int ID_CUT = android.R.id.cut;
- private static final int ID_HORIZONTALLINE = 0x00FFFF01;
- private static final int ID_CLEARSTYLES = 0x00FFFF02;
- private static final int ID_SHOWEDIT = 0x00FFFF03;
- private static final int ID_HIDEEDIT = 0x00FFFF04;
- private static final int MAXIMAGEWIDTHDIP = 300;
-
- /**
- * Strings for context menu. TODO: Extract the strings to strings.xml.
- */
- private static CharSequence STR_HORIZONTALLINE;
- private static CharSequence STR_CLEARSTYLES;
- private static CharSequence STR_PASTE;
-
- private float mPaddingScale = 0;
- private ArrayList<EditStyledTextNotifier> mESTNotifiers;
- private Drawable mDefaultBackground;
- // EditStyledTextEditorManager manages the flow and status of each function of StyledText.
- private EditorManager mManager;
- private InputConnection mInputConnection;
- private StyledTextConverter mConverter;
- private StyledTextDialog mDialog;
-
- private static final Concrete SELECTING = new NoCopySpan.Concrete();
- private static final int PRESSED = Spannable.SPAN_MARK_MARK | (1 << Spannable.SPAN_USER_SHIFT);
-
- /**
- * EditStyledText extends EditText for managing flow of each editing action.
- */
- public EditStyledText(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init();
- }
-
- public EditStyledText(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
-
- public EditStyledText(Context context) {
- super(context);
- init();
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- boolean superResult;
- if (event.getAction() == MotionEvent.ACTION_UP) {
- cancelLongPress();
- boolean editting = isEditting();
- // If View is touched but not in Edit Mode, starts Edit Mode.
- if (!editting) {
- onStartEdit();
- }
- int oldSelStart = Selection.getSelectionStart(getText());
- int oldSelEnd = Selection.getSelectionEnd(getText());
- superResult = super.onTouchEvent(event);
- if (isFocused()) {
- // If selection is started, don't open soft key by
- // touching.
- if (getSelectState() == STATE_SELECT_OFF) {
- if (editting) {
- mManager.showSoftKey(Selection.getSelectionStart(getText()),
- Selection.getSelectionEnd(getText()));
- } else {
- mManager.showSoftKey(oldSelStart, oldSelEnd);
- }
- }
- }
- mManager.onCursorMoved();
- mManager.unsetTextComposingMask();
- } else {
- superResult = super.onTouchEvent(event);
- }
- sendOnTouchEvent(event);
- return superResult;
- }
-
- @Override
- public Parcelable onSaveInstanceState() {
- Parcelable superState = super.onSaveInstanceState();
- SavedStyledTextState ss = new SavedStyledTextState(superState);
- ss.mBackgroundColor = mManager.getBackgroundColor();
- return ss;
- }
-
- @Override
- public void onRestoreInstanceState(Parcelable state) {
- if (!(state instanceof SavedStyledTextState)) {
- super.onRestoreInstanceState(state);
- return;
- }
- SavedStyledTextState ss = (SavedStyledTextState) state;
- super.onRestoreInstanceState(ss.getSuperState());
- setBackgroundColor(ss.mBackgroundColor);
- }
-
- @Override
- protected void drawableStateChanged() {
- super.drawableStateChanged();
- if (mManager != null) {
- mManager.onRefreshStyles();
- }
- }
-
- @Override
- public boolean onTextContextMenuItem(int id) {
- boolean selection = getSelectionStart() != getSelectionEnd();
- switch (id) {
- case ID_SELECT_ALL:
- onStartSelectAll();
- return true;
- case ID_START_SELECTING_TEXT:
- onStartSelect();
- mManager.blockSoftKey();
- break;
- case ID_STOP_SELECTING_TEXT:
- onFixSelectedItem();
- break;
- case ID_PASTE:
- onStartPaste();
- return true;
- case ID_COPY:
- if (selection) {
- onStartCopy();
- } else {
- mManager.onStartSelectAll(false);
- onStartCopy();
- }
- return true;
- case ID_CUT:
- if (selection) {
- onStartCut();
- } else {
- mManager.onStartSelectAll(false);
- onStartCut();
- }
- return true;
- case ID_HORIZONTALLINE:
- onInsertHorizontalLine();
- return true;
- case ID_CLEARSTYLES:
- onClearStyles();
- return true;
- case ID_SHOWEDIT:
- onStartEdit();
- return true;
- case ID_HIDEEDIT:
- onEndEdit();
- return true;
- }
- return super.onTextContextMenuItem(id);
- }
-
- @Override
- protected void onCreateContextMenu(ContextMenu menu) {
- super.onCreateContextMenu(menu);
- MenuHandler handler = new MenuHandler();
- if (STR_HORIZONTALLINE != null) {
- menu.add(0, ID_HORIZONTALLINE, 0, STR_HORIZONTALLINE).setOnMenuItemClickListener(
- handler);
- }
- if (isStyledText() && STR_CLEARSTYLES != null) {
- menu.add(0, ID_CLEARSTYLES, 0, STR_CLEARSTYLES)
- .setOnMenuItemClickListener(handler);
- }
- if (mManager.canPaste()) {
- menu.add(0, ID_PASTE, 0, STR_PASTE)
- .setOnMenuItemClickListener(handler).setAlphabeticShortcut('v');
- }
- }
-
- @Override
- protected void onTextChanged(CharSequence text, int start, int before, int after) {
- // onTextChanged will be called super's constructor.
- if (mManager != null) {
- mManager.updateSpanNextToCursor(getText(), start, before, after);
- mManager.updateSpanPreviousFromCursor(getText(), start, before, after);
- if (after > before) {
- mManager.setTextComposingMask(start, start + after);
- } else if (before < after) {
- mManager.unsetTextComposingMask();
- }
- if (mManager.isWaitInput()) {
- if (after > before) {
- mManager.onCursorMoved();
- onFixSelectedItem();
- } else if (after < before) {
- mManager.onAction(MODE_RESET);
- }
- }
- }
- super.onTextChanged(text, start, before, after);
- }
-
- @Override
- public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
- mInputConnection =
- new StyledTextInputConnection(super.onCreateInputConnection(outAttrs), this);
- return mInputConnection;
- }
-
- @Override
- protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
- super.onFocusChanged(focused, direction, previouslyFocusedRect);
- if (focused) {
- onStartEdit();
- } else if (!isButtonsFocused()) {
- onEndEdit();
- }
- }
-
- /**
- * Initialize members.
- */
- private void init() {
- mConverter = new StyledTextConverter(this, new StyledTextHtmlStandard());
- mDialog = new StyledTextDialog(this);
- mManager = new EditorManager(this, mDialog);
- setMovementMethod(new StyledTextArrowKeyMethod(mManager));
- mDefaultBackground = getBackground();
- requestFocus();
- }
-
- public interface StyledTextHtmlConverter {
- public String toHtml(Spanned text);
-
- public String toHtml(Spanned text, boolean escapeNonAsciiChar);
-
- public String toHtml(Spanned text, boolean escapeNonAsciiChar, int width, float scale);
-
- public Spanned fromHtml(String string);
-
- public Spanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler);
- }
-
- public void setStyledTextHtmlConverter(StyledTextHtmlConverter html) {
- mConverter.setStyledTextHtmlConverter(html);
- }
-
- /**
- * EditStyledTextInterface provides functions for notifying messages to calling class.
- */
- public interface EditStyledTextNotifier {
- public void sendHintMsg(int msgId);
-
- public void onStateChanged(int mode, int state);
-
- public boolean sendOnTouchEvent(MotionEvent event);
-
- public boolean isButtonsFocused();
-
- public boolean showPreview();
-
- public void cancelViewManager();
-
- public boolean showInsertImageSelectAlertDialog();
-
- public boolean showMenuAlertDialog();
- }
-
- /**
- * Add Notifier.
- */
- public void addEditStyledTextListener(EditStyledTextNotifier estInterface) {
- if (mESTNotifiers == null) {
- mESTNotifiers = new ArrayList<EditStyledTextNotifier>();
- }
- mESTNotifiers.add(estInterface);
- }
-
- /**
- * Remove Notifier.
- */
- public void removeEditStyledTextListener(EditStyledTextNotifier estInterface) {
- if (mESTNotifiers != null) {
- int i = mESTNotifiers.indexOf(estInterface);
-
- if (i > 0) {
- mESTNotifiers.remove(i);
- }
- }
- }
-
- private void sendOnTouchEvent(MotionEvent event) {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- notifier.sendOnTouchEvent(event);
- }
- }
- }
-
- public boolean isButtonsFocused() {
- boolean retval = false;
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- retval |= notifier.isButtonsFocused();
- }
- }
- return retval;
- }
-
- private void showPreview() {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- if (notifier.showPreview()) {
- break;
- }
- }
- }
- }
-
- private void cancelViewManagers() {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- notifier.cancelViewManager();
- }
- }
- }
-
- private void showInsertImageSelectAlertDialog() {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- if (notifier.showInsertImageSelectAlertDialog()) {
- break;
- }
- }
- }
- }
-
- private void showMenuAlertDialog() {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- if (notifier.showMenuAlertDialog()) {
- break;
- }
- }
- }
- }
-
- /**
- * Notify hint messages what action is expected to calling class.
- *
- * @param msgId Id of the hint message.
- */
- private void sendHintMessage(int msgId) {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- notifier.sendHintMsg(msgId);
- }
- }
- }
-
- /**
- * Notify the event that the mode and state are changed.
- *
- * @param mode Mode of the editing action.
- * @param state Mode of the selection state.
- */
- private void notifyStateChanged(int mode, int state) {
- if (mESTNotifiers != null) {
- for (EditStyledTextNotifier notifier : mESTNotifiers) {
- notifier.onStateChanged(mode, state);
- }
- }
- }
-
- /** Start to edit styled text */
- public void onStartEdit() {
- mManager.onAction(MODE_START_EDIT);
- }
-
- /** End of editing styled text */
- public void onEndEdit() {
- mManager.onAction(MODE_END_EDIT);
- }
-
- public void onResetEdit() {
- mManager.onAction(MODE_RESET);
- }
-
- /** Start to copy styled text */
- public void onStartCopy() {
- mManager.onAction(MODE_COPY);
- }
-
- /** Start to cut styled text */
- public void onStartCut() {
- mManager.onAction(MODE_CUT);
- }
-
- /** Start to paste styled text */
- public void onStartPaste() {
- mManager.onAction(MODE_PASTE);
- }
-
- /** Start to change size */
- public void onStartSize() {
- mManager.onAction(MODE_SIZE);
- }
-
- /** Start to change color */
- public void onStartColor() {
- mManager.onAction(MODE_COLOR);
- }
-
- /** Start to change background color */
- public void onStartBackgroundColor() {
- mManager.onAction(MODE_BGCOLOR);
- }
-
- /** Start to change Alignment */
- public void onStartAlign() {
- mManager.onAction(MODE_ALIGN);
- }
-
- public void onStartTelop() {
- mManager.onAction(MODE_TELOP);
- }
-
- public void onStartSwing() {
- mManager.onAction(MODE_SWING);
- }
-
- public void onStartMarquee() {
- mManager.onAction(MODE_MARQUEE);
- }
-
- /** Start to select a text */
- public void onStartSelect() {
- mManager.onStartSelect(true);
- }
-
- /** Start to select all characters */
- public void onStartSelectAll() {
- mManager.onStartSelectAll(true);
- }
-
- public void onStartShowPreview() {
- mManager.onAction(MODE_PREVIEW);
- }
-
- public void onStartShowMenuAlertDialog() {
- mManager.onStartShowMenuAlertDialog();
- }
-
- public void onStartAction(int mode, boolean notifyStateChanged) {
- mManager.onAction(mode, notifyStateChanged);
- }
-
- /** Fix selection */
- public void onFixSelectedItem() {
- mManager.onFixSelectedItem();
- }
-
- public void onInsertImage() {
- mManager.onAction(MODE_IMAGE);
- }
-
- /**
- * InsertImage to TextView by using URI
- *
- * @param uri URI of the iamge inserted to TextView.
- */
- public void onInsertImage(Uri uri) {
- mManager.onInsertImage(uri);
- }
-
- /**
- * InsertImage to TextView by using resource ID
- *
- * @param resId Resource ID of the iamge inserted to TextView.
- */
- public void onInsertImage(int resId) {
- mManager.onInsertImage(resId);
- }
-
- public void onInsertHorizontalLine() {
- mManager.onAction(MODE_HORIZONTALLINE);
- }
-
- public void onClearStyles() {
- mManager.onClearStyles();
- }
-
- public void onBlockSoftKey() {
- mManager.blockSoftKey();
- }
-
- public void onUnblockSoftKey() {
- mManager.unblockSoftKey();
- }
-
- public void onCancelViewManagers() {
- mManager.onCancelViewManagers();
- }
-
- private void onRefreshStyles() {
- mManager.onRefreshStyles();
- }
-
- private void onRefreshZeoWidthChar() {
- mManager.onRefreshZeoWidthChar();
- }
-
- /**
- * Set Size of the Item.
- *
- * @param size The size of the Item.
- */
- public void setItemSize(int size) {
- mManager.setItemSize(size, true);
- }
-
- /**
- * Set Color of the Item.
- *
- * @param color The color of the Item.
- */
- public void setItemColor(int color) {
- mManager.setItemColor(color, true);
- }
-
- /**
- * Set Alignment of the Item.
- *
- * @param align The color of the Item.
- */
- public void setAlignment(Layout.Alignment align) {
- mManager.setAlignment(align);
- }
-
- /**
- * Set Background color of View.
- *
- * @param color The background color of view.
- */
- @Override
- public void setBackgroundColor(int color) {
- if (color != DEFAULT_TRANSPARENT_COLOR) {
- super.setBackgroundColor(color);
- } else {
- setBackgroundDrawable(mDefaultBackground);
- }
- mManager.setBackgroundColor(color);
- onRefreshStyles();
- }
-
- public void setMarquee(int marquee) {
- mManager.setMarquee(marquee);
- }
-
- /**
- * Set html to EditStyledText.
- *
- * @param html The html to be set.
- */
- public void setHtml(String html) {
- mConverter.SetHtml(html);
- }
-
- /**
- * Set Builder for AlertDialog.
- *
- * @param builder Builder for opening Alert Dialog.
- */
- public void setBuilder(Builder builder) {
- mDialog.setBuilder(builder);
- }
-
- /**
- * Set Parameters for ColorAlertDialog.
- *
- * @param colortitle Title for Alert Dialog.
- * @param colornames List of name of selecting color.
- * @param colorints List of int of color.
- */
- public void setColorAlertParams(CharSequence colortitle, CharSequence[] colornames,
- CharSequence[] colorints, CharSequence transparent) {
- mDialog.setColorAlertParams(colortitle, colornames, colorints, transparent);
- }
-
- /**
- * Set Parameters for SizeAlertDialog.
- *
- * @param sizetitle Title for Alert Dialog.
- * @param sizenames List of name of selecting size.
- * @param sizedisplayints List of int of size displayed in TextView.
- * @param sizesendints List of int of size exported to HTML.
- */
- public void setSizeAlertParams(CharSequence sizetitle, CharSequence[] sizenames,
- CharSequence[] sizedisplayints, CharSequence[] sizesendints) {
- mDialog.setSizeAlertParams(sizetitle, sizenames, sizedisplayints, sizesendints);
- }
-
- public void setAlignAlertParams(CharSequence aligntitle, CharSequence[] alignnames) {
- mDialog.setAlignAlertParams(aligntitle, alignnames);
- }
-
- public void setMarqueeAlertParams(CharSequence marqueetitle, CharSequence[] marqueenames) {
- mDialog.setMarqueeAlertParams(marqueetitle, marqueenames);
- }
-
- public void setContextMenuStrings(CharSequence horizontalline, CharSequence clearstyles,
- CharSequence paste) {
- STR_HORIZONTALLINE = horizontalline;
- STR_CLEARSTYLES = clearstyles;
- STR_PASTE = paste;
- }
-
- /**
- * Check whether editing is started or not.
- *
- * @return Whether editing is started or not.
- */
- public boolean isEditting() {
- return mManager.isEditting();
- }
-
- /**
- * Check whether styled text or not.
- *
- * @return Whether styled text or not.
- */
- public boolean isStyledText() {
- return mManager.isStyledText();
- }
-
- /**
- * Check whether SoftKey is Blocked or not.
- *
- * @return whether SoftKey is Blocked or not.
- */
- public boolean isSoftKeyBlocked() {
- return mManager.isSoftKeyBlocked();
- }
-
- /**
- * Get the mode of the action.
- *
- * @return The mode of the action.
- */
- public int getEditMode() {
- return mManager.getEditMode();
- }
-
- /**
- * Get the state of the selection.
- *
- * @return The state of the selection.
- */
- public int getSelectState() {
- return mManager.getSelectState();
- }
-
- /**
- * Get the state of the selection.
- *
- * @return The state of the selection.
- */
- public String getHtml() {
- return mConverter.getHtml(true);
- }
-
- public String getHtml(boolean escapeFlag) {
- return mConverter.getHtml(escapeFlag);
- }
-
- /**
- * Get the state of the selection.
- *
- * @param uris The array of used uris.
- * @return The state of the selection.
- */
- public String getHtml(ArrayList<Uri> uris, boolean escapeFlag) {
- mConverter.getUriArray(uris, getText());
- return mConverter.getHtml(escapeFlag);
- }
-
- public String getPreviewHtml() {
- return mConverter.getPreviewHtml();
- }
-
- /**
- * Get Background color of View.
- *
- * @return The background color of View.
- */
- public int getBackgroundColor() {
- return mManager.getBackgroundColor();
- }
-
- public EditorManager getEditStyledTextManager() {
- return mManager;
- }
-
- /**
- * Get Foreground color of View.
- *
- * @return The background color of View.
- */
- public int getForegroundColor(int pos) {
- if (pos < 0 || pos > getText().length()) {
- return DEFAULT_FOREGROUND_COLOR;
- } else {
- ForegroundColorSpan[] spans =
- getText().getSpans(pos, pos, ForegroundColorSpan.class);
- if (spans.length > 0) {
- return spans[0].getForegroundColor();
- } else {
- return DEFAULT_FOREGROUND_COLOR;
- }
- }
- }
-
- private void finishComposingText() {
- if (mInputConnection != null && !mManager.mTextIsFinishedFlag) {
- mInputConnection.finishComposingText();
- mManager.mTextIsFinishedFlag = true;
- }
- }
-
- private float getPaddingScale() {
- if (mPaddingScale <= 0) {
- mPaddingScale = getContext().getResources().getDisplayMetrics().density;
- }
- return mPaddingScale;
- }
-
- /** Convert pixcel to DIP */
- private int dipToPx(int dip) {
- if (mPaddingScale <= 0) {
- mPaddingScale = getContext().getResources().getDisplayMetrics().density;
- }
- return (int) ((float) dip * getPaddingScale() + 0.5);
- }
-
- private int getMaxImageWidthDip() {
- return MAXIMAGEWIDTHDIP;
- }
-
- private int getMaxImageWidthPx() {
- return dipToPx(MAXIMAGEWIDTHDIP);
- }
-
- public void addAction(int mode, EditModeActionBase action) {
- mManager.addAction(mode, action);
- }
-
- public void addInputExtra(boolean create, String extra) {
- Bundle bundle = super.getInputExtras(create);
- if (bundle != null) {
- bundle.putBoolean(extra, true);
- }
- }
-
- private static void startSelecting(View view, Spannable content) {
- content.setSpan(SELECTING, 0, 0, PRESSED);
- }
-
- private static void stopSelecting(View view, Spannable content) {
- content.removeSpan(SELECTING);
- }
-
- /**
- * EditorManager manages the flow and status of editing actions.
- */
- private class EditorManager {
-
- static final private String LOG_TAG = "EditStyledText.EditorManager";
-
- private boolean mEditFlag = false;
- private boolean mSoftKeyBlockFlag = false;
- private boolean mKeepNonLineSpan = false;
- private boolean mWaitInputFlag = false;
- private boolean mTextIsFinishedFlag = false;
- private int mMode = MODE_NOTHING;
- private int mState = STATE_SELECT_OFF;
- private int mCurStart = 0;
- private int mCurEnd = 0;
- private int mColorWaitInput = DEFAULT_TRANSPARENT_COLOR;
- private int mSizeWaitInput = 0;
- private int mBackgroundColor = DEFAULT_TRANSPARENT_COLOR;
-
- private BackgroundColorSpan mComposingTextMask;
- private EditStyledText mEST;
- private EditModeActions mActions;
- private SoftKeyReceiver mSkr;
- private SpannableStringBuilder mCopyBuffer;
-
- EditorManager(EditStyledText est, StyledTextDialog dialog) {
- mEST = est;
- mActions = new EditModeActions(mEST, this, dialog);
- mSkr = new SoftKeyReceiver(mEST);
- }
-
- public void addAction(int mode, EditModeActionBase action) {
- mActions.addAction(mode, action);
- }
-
- public void onAction(int mode) {
- onAction(mode, true);
- }
-
- public void onAction(int mode, boolean notifyStateChanged) {
- mActions.onAction(mode);
- if (notifyStateChanged) {
- mEST.notifyStateChanged(mMode, mState);
- }
- }
-
- private void startEdit() {
- resetEdit();
- showSoftKey();
- }
-
- public void onStartSelect(boolean notifyStateChanged) {
- if (DBG) {
- Log.d(LOG_TAG, "--- onClickSelect");
- }
- mMode = MODE_SELECT;
- if (mState == STATE_SELECT_OFF) {
- mActions.onSelectAction();
- } else {
- unsetSelect();
- mActions.onSelectAction();
- }
- if (notifyStateChanged) {
- mEST.notifyStateChanged(mMode, mState);
- }
- }
-
- public void onCursorMoved() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onClickView");
- }
- if (mState == STATE_SELECT_ON || mState == STATE_SELECTED) {
- mActions.onSelectAction();
- mEST.notifyStateChanged(mMode, mState);
- }
- }
-
- public void onStartSelectAll(boolean notifyStateChanged) {
- if (DBG) {
- Log.d(LOG_TAG, "--- onClickSelectAll");
- }
- handleSelectAll();
- if (notifyStateChanged) {
- mEST.notifyStateChanged(mMode, mState);
- }
- }
-
- public void onStartShowMenuAlertDialog() {
- mActions.onAction(MODE_SHOW_MENU);
- // don't call notify state changed because it have to continue
- // to the next action.
- // mEST.notifyStateChanged(mMode, mState);
- }
-
- public void onFixSelectedItem() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onFixSelectedItem");
- }
- fixSelectionAndDoNextAction();
- mEST.notifyStateChanged(mMode, mState);
- }
-
- public void onInsertImage(Uri uri) {
- mActions.onAction(MODE_IMAGE, uri);
- mEST.notifyStateChanged(mMode, mState);
- }
-
- public void onInsertImage(int resId) {
- mActions.onAction(MODE_IMAGE, resId);
- mEST.notifyStateChanged(mMode, mState);
- }
-
- private void insertImageFromUri(Uri uri) {
- insertImageSpan(new EditStyledTextSpans.RescalableImageSpan(mEST.getContext(),
- uri, mEST.getMaxImageWidthPx()), mEST.getSelectionStart());
- }
-
- private void insertImageFromResId(int resId) {
- insertImageSpan(new EditStyledTextSpans.RescalableImageSpan(mEST.getContext(),
- resId, mEST.getMaxImageWidthDip()), mEST.getSelectionStart());
- }
-
- private void insertHorizontalLine() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onInsertHorizontalLine:");
- }
- int curpos = mEST.getSelectionStart();
- if (curpos > 0 && mEST.getText().charAt(curpos - 1) != '\n') {
- mEST.getText().insert(curpos++, "\n");
- }
- insertImageSpan(
- new HorizontalLineSpan(0xFF000000, mEST.getWidth(), mEST.getText()),
- curpos++);
- mEST.getText().insert(curpos++, "\n");
- mEST.setSelection(curpos);
- mEST.notifyStateChanged(mMode, mState);
- }
-
- private void clearStyles(CharSequence txt) {
- if (DBG) {
- Log.d("EditStyledText", "--- onClearStyles");
- }
- int len = txt.length();
- if (txt instanceof Editable) {
- Editable editable = (Editable) txt;
- Object[] styles = editable.getSpans(0, len, Object.class);
- for (Object style : styles) {
- if (style instanceof ParagraphStyle || style instanceof QuoteSpan
- || style instanceof CharacterStyle
- && !(style instanceof UnderlineSpan)) {
- if (style instanceof ImageSpan || style instanceof HorizontalLineSpan) {
- int start = editable.getSpanStart(style);
- int end = editable.getSpanEnd(style);
- editable.replace(start, end, "");
- }
- editable.removeSpan(style);
- }
- }
- }
- }
-
- public void onClearStyles() {
- mActions.onAction(MODE_CLEARSTYLES);
- }
-
- public void onCancelViewManagers() {
- mActions.onAction(MODE_CANCEL);
- }
-
- private void clearStyles() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onClearStyles");
- }
- clearStyles(mEST.getText());
- mEST.setBackgroundDrawable(mEST.mDefaultBackground);
- mBackgroundColor = DEFAULT_TRANSPARENT_COLOR;
- onRefreshZeoWidthChar();
- }
-
- public void onRefreshZeoWidthChar() {
- Editable txt = mEST.getText();
- for (int i = 0; i < txt.length(); i++) {
- if (txt.charAt(i) == ZEROWIDTHCHAR) {
- txt.replace(i, i + 1, "");
- i--;
- }
- }
- }
-
- public void onRefreshStyles() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onRefreshStyles");
- }
- Editable txt = mEST.getText();
- int len = txt.length();
- int width = mEST.getWidth();
- HorizontalLineSpan[] lines = txt.getSpans(0, len, HorizontalLineSpan.class);
- for (HorizontalLineSpan line : lines) {
- line.resetWidth(width);
- }
- MarqueeSpan[] marquees = txt.getSpans(0, len, MarqueeSpan.class);
- for (MarqueeSpan marquee : marquees) {
- marquee.resetColor(mEST.getBackgroundColor());
- }
-
- if (lines.length > 0) {
- // This is hack, bad needed for renewing View
- // by inserting new line.
- txt.replace(0, 1, "" + txt.charAt(0));
- }
- }
-
- public void setBackgroundColor(int color) {
- mBackgroundColor = color;
- }
-
- public void setItemSize(int size, boolean reset) {
- if (DBG) {
- Log.d(LOG_TAG, "--- setItemSize");
- }
- if (isWaitingNextAction()) {
- mSizeWaitInput = size;
- } else if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- if (size > 0) {
- changeSizeSelectedText(size);
- }
- if (reset) {
- resetEdit();
- }
- }
- }
-
- public void setItemColor(int color, boolean reset) {
- if (DBG) {
- Log.d(LOG_TAG, "--- setItemColor");
- }
- if (isWaitingNextAction()) {
- mColorWaitInput = color;
- } else if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- if (color != DEFAULT_TRANSPARENT_COLOR) {
- changeColorSelectedText(color);
- }
- if (reset) {
- resetEdit();
- }
- }
- }
-
- public void setAlignment(Layout.Alignment align) {
- if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- changeAlign(align);
- resetEdit();
- }
- }
-
- public void setTelop() {
- if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- addTelop();
- resetEdit();
- }
- }
-
- public void setSwing() {
- if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- addSwing();
- resetEdit();
- }
- }
-
- public void setMarquee(int marquee) {
- if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) {
- addMarquee(marquee);
- resetEdit();
- }
- }
-
- public void setTextComposingMask(int start, int end) {
- if (DBG) {
- Log.d(TAG, "--- setTextComposingMask:" + start + "," + end);
- }
- int min = Math.min(start, end);
- int max = Math.max(start, end);
- int foregroundColor;
- if (isWaitInput() && mColorWaitInput != DEFAULT_TRANSPARENT_COLOR) {
- foregroundColor = mColorWaitInput;
- } else {
- foregroundColor = mEST.getForegroundColor(min);
- }
- int backgroundColor = mEST.getBackgroundColor();
- if (DBG) {
- Log.d(TAG,
- "--- fg:" + Integer.toHexString(foregroundColor) + ",bg:"
- + Integer.toHexString(backgroundColor) + "," + isWaitInput()
- + "," + "," + mMode);
- }
- if (foregroundColor == backgroundColor) {
- int maskColor = 0x80000000 | ~(backgroundColor | 0xFF000000);
- if (mComposingTextMask == null
- || mComposingTextMask.getBackgroundColor() != maskColor) {
- mComposingTextMask = new BackgroundColorSpan(maskColor);
- }
- mEST.getText().setSpan(mComposingTextMask, min, max,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- }
-
- private void setEditMode(int mode) {
- mMode = mode;
- }
-
- private void setSelectState(int state) {
- mState = state;
- }
-
- public void unsetTextComposingMask() {
- if (DBG) {
- Log.d(TAG, "--- unsetTextComposingMask");
- }
- if (mComposingTextMask != null) {
- mEST.getText().removeSpan(mComposingTextMask);
- mComposingTextMask = null;
- }
- }
-
- public boolean isEditting() {
- return mEditFlag;
- }
-
- /* If the style of the span is added, add check case for that style */
- public boolean isStyledText() {
- Editable txt = mEST.getText();
- int len = txt.length();
- if (txt.getSpans(0, len, ParagraphStyle.class).length > 0
- || txt.getSpans(0, len, QuoteSpan.class).length > 0
- || txt.getSpans(0, len, CharacterStyle.class).length > 0
- || mBackgroundColor != DEFAULT_TRANSPARENT_COLOR) {
- return true;
- }
- return false;
- }
-
- public boolean isSoftKeyBlocked() {
- return mSoftKeyBlockFlag;
- }
-
- public boolean isWaitInput() {
- return mWaitInputFlag;
- }
-
- public int getBackgroundColor() {
- return mBackgroundColor;
- }
-
- public int getEditMode() {
- return mMode;
- }
-
- public int getSelectState() {
- return mState;
- }
-
- public int getSelectionStart() {
- return mCurStart;
- }
-
- public int getSelectionEnd() {
- return mCurEnd;
- }
-
- public int getSizeWaitInput() {
- return mSizeWaitInput;
- }
-
- public int getColorWaitInput() {
- return mColorWaitInput;
- }
-
- private void setInternalSelection(int curStart, int curEnd) {
- mCurStart = curStart;
- mCurEnd = curEnd;
- }
-
- public void
- updateSpanPreviousFromCursor(Editable txt, int start, int before, int after) {
- if (DBG) {
- Log.d(LOG_TAG, "updateSpanPrevious:" + start + "," + before + "," + after);
- }
- int end = start + after;
- int min = Math.min(start, end);
- int max = Math.max(start, end);
- Object[] spansBefore = txt.getSpans(min, min, Object.class);
- for (Object span : spansBefore) {
- if (span instanceof ForegroundColorSpan || span instanceof AbsoluteSizeSpan
- || span instanceof MarqueeSpan || span instanceof AlignmentSpan) {
- int spanstart = txt.getSpanStart(span);
- int spanend = txt.getSpanEnd(span);
- if (DBG) {
- Log.d(LOG_TAG, "spantype:" + span.getClass() + "," + spanstart);
- }
- int tempmax = max;
- if (span instanceof MarqueeSpan || span instanceof AlignmentSpan) {
- // Line Span
- tempmax = findLineEnd(mEST.getText(), max);
- } else {
- if (mKeepNonLineSpan) {
- tempmax = spanend;
- }
- }
- if (spanend < tempmax) {
- if (DBG) {
- Log.d(LOG_TAG, "updateSpanPrevious: extend span");
- }
- txt.setSpan(span, spanstart, tempmax,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- } else if (span instanceof HorizontalLineSpan) {
- int spanstart = txt.getSpanStart(span);
- int spanend = txt.getSpanEnd(span);
- if (before > after) {
- // When text is deleted just after horizontalLineSpan, horizontalLineSpan
- // has to be deleted, because the charactor just after horizontalLineSpan
- // is '\n'.
- txt.replace(spanstart, spanend, "");
- txt.removeSpan(span);
- } else {
- // When text is added just after horizontalLineSpan add '\n' just after
- // horizontalLineSpan.
- if (spanend == end && end < txt.length()
- && mEST.getText().charAt(end) != '\n') {
- mEST.getText().insert(end, "\n");
- }
- }
- }
- }
- }
-
- public void updateSpanNextToCursor(Editable txt, int start, int before, int after) {
- if (DBG) {
- Log.d(LOG_TAG, "updateSpanNext:" + start + "," + before + "," + after);
- }
- int end = start + after;
- int min = Math.min(start, end);
- int max = Math.max(start, end);
- Object[] spansAfter = txt.getSpans(max, max, Object.class);
- for (Object span : spansAfter) {
- if (span instanceof MarqueeSpan || span instanceof AlignmentSpan) {
- int spanstart = txt.getSpanStart(span);
- int spanend = txt.getSpanEnd(span);
- if (DBG) {
- Log.d(LOG_TAG, "spantype:" + span.getClass() + "," + spanend);
- }
- int tempmin = min;
- if (span instanceof MarqueeSpan || span instanceof AlignmentSpan) {
- tempmin = findLineStart(mEST.getText(), min);
- }
- if (tempmin < spanstart && before > after) {
- txt.removeSpan(span);
- } else if (spanstart > min) {
- txt.setSpan(span, min, spanend, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- } else if (span instanceof HorizontalLineSpan) {
- int spanstart = txt.getSpanStart(span);
- // Whene text is changed just before horizontalLineSpan and there is no '\n'
- // just before horizontalLineSpan add '\n'
- if (spanstart == end && end > 0 && mEST.getText().charAt(end - 1) != '\n') {
- mEST.getText().insert(end, "\n");
- mEST.setSelection(end);
- }
- }
- }
- }
-
- /** canPaste returns true only if ClipboardManager doen't contain text. */
- public boolean canPaste() {
- return (mCopyBuffer != null && mCopyBuffer.length() > 0 && removeImageChar(
- mCopyBuffer).length() == 0);
- }
-
- private void endEdit() {
- if (DBG) {
- Log.d(LOG_TAG, "--- handleCancel");
- }
- mMode = MODE_NOTHING;
- mState = STATE_SELECT_OFF;
- mEditFlag = false;
- mColorWaitInput = DEFAULT_TRANSPARENT_COLOR;
- mSizeWaitInput = 0;
- mWaitInputFlag = false;
- mSoftKeyBlockFlag = false;
- mKeepNonLineSpan = false;
- mTextIsFinishedFlag = false;
- unsetSelect();
- mEST.setOnClickListener(null);
- unblockSoftKey();
- }
-
- private void fixSelectionAndDoNextAction() {
- if (DBG) {
- Log.d(LOG_TAG, "--- handleComplete:" + mCurStart + "," + mCurEnd);
- }
- if (!mEditFlag) {
- return;
- }
- if (mCurStart == mCurEnd) {
- if (DBG) {
- Log.d(LOG_TAG, "--- cancel handle complete:" + mCurStart);
- }
- resetEdit();
- return;
- }
- if (mState == STATE_SELECTED) {
- mState = STATE_SELECT_FIX;
- }
- // When the complete button is clicked, this should do action.
- mActions.doNext(mMode);
- //MetaKeyKeyListener.stopSelecting(mEST, mEST.getText());
- stopSelecting(mEST, mEST.getText());
- }
-
- // Remove obj character for DynamicDrawableSpan from clipboard.
- private SpannableStringBuilder removeImageChar(SpannableStringBuilder text) {
- SpannableStringBuilder buf = new SpannableStringBuilder(text);
- DynamicDrawableSpan[] styles =
- buf.getSpans(0, buf.length(), DynamicDrawableSpan.class);
- for (DynamicDrawableSpan style : styles) {
- if (style instanceof HorizontalLineSpan
- || style instanceof RescalableImageSpan) {
- int start = buf.getSpanStart(style);
- int end = buf.getSpanEnd(style);
- buf.replace(start, end, "");
- }
- }
- return buf;
- }
-
- private void copyToClipBoard() {
- int min = Math.min(getSelectionStart(), getSelectionEnd());
- int max = Math.max(getSelectionStart(), getSelectionEnd());
- mCopyBuffer = (SpannableStringBuilder) mEST.getText().subSequence(min, max);
- SpannableStringBuilder clipboardtxt = removeImageChar(mCopyBuffer);
- ClipboardManager clip =
- (ClipboardManager) getContext()
- .getSystemService(Context.CLIPBOARD_SERVICE);
- clip.setText(clipboardtxt);
- if (DBG) {
- dumpSpannableString(clipboardtxt);
- dumpSpannableString(mCopyBuffer);
- }
- }
-
- private void cutToClipBoard() {
- copyToClipBoard();
- int min = Math.min(getSelectionStart(), getSelectionEnd());
- int max = Math.max(getSelectionStart(), getSelectionEnd());
- mEST.getText().delete(min, max);
- }
-
- private boolean isClipBoardChanged(CharSequence clipboardText) {
- if (DBG) {
- Log.d(TAG, "--- isClipBoardChanged:" + clipboardText);
- }
- if (mCopyBuffer == null) {
- return true;
- }
- int len = clipboardText.length();
- CharSequence removedClipBoard = removeImageChar(mCopyBuffer);
- if (DBG) {
- Log.d(TAG, "--- clipBoard:" + len + "," + removedClipBoard + clipboardText);
- }
- if (len != removedClipBoard.length()) {
- return true;
- }
- for (int i = 0; i < len; ++i) {
- if (clipboardText.charAt(i) != removedClipBoard.charAt(i)) {
- return true;
- }
- }
- return false;
- }
-
- private void pasteFromClipboard() {
- int min = Math.min(mEST.getSelectionStart(), mEST.getSelectionEnd());
- int max = Math.max(mEST.getSelectionStart(), mEST.getSelectionEnd());
- // TODO: Find more smart way to set Span to Clipboard.
- Selection.setSelection(mEST.getText(), max);
- ClipboardManager clip =
- (ClipboardManager) getContext()
- .getSystemService(Context.CLIPBOARD_SERVICE);
- mKeepNonLineSpan = true;
- mEST.getText().replace(min, max, clip.getText());
- if (!isClipBoardChanged(clip.getText())) {
- if (DBG) {
- Log.d(TAG, "--- handlePaste: startPasteImage");
- }
- DynamicDrawableSpan[] styles =
- mCopyBuffer.getSpans(0, mCopyBuffer.length(),
- DynamicDrawableSpan.class);
- for (DynamicDrawableSpan style : styles) {
- int start = mCopyBuffer.getSpanStart(style);
- if (style instanceof HorizontalLineSpan) {
- insertImageSpan(new HorizontalLineSpan(0xFF000000, mEST.getWidth(),
- mEST.getText()), min + start);
- } else if (style instanceof RescalableImageSpan) {
- insertImageSpan(
- new RescalableImageSpan(mEST.getContext(),
- ((RescalableImageSpan) style).getContentUri(),
- mEST.getMaxImageWidthPx()), min + start);
- }
- }
- }
- }
-
- private void handleSelectAll() {
- if (!mEditFlag) {
- return;
- }
- mActions.onAction(MODE_SELECTALL);
- }
-
- private void selectAll() {
- Selection.selectAll(mEST.getText());
- mCurStart = mEST.getSelectionStart();
- mCurEnd = mEST.getSelectionEnd();
- mMode = MODE_SELECT;
- mState = STATE_SELECT_FIX;
- }
-
- private void resetEdit() {
- endEdit();
- mEditFlag = true;
- mEST.notifyStateChanged(mMode, mState);
- }
-
- private void setSelection() {
- if (DBG) {
- Log.d(LOG_TAG, "--- onSelect:" + mCurStart + "," + mCurEnd);
- }
- if (mCurStart >= 0 && mCurStart <= mEST.getText().length() && mCurEnd >= 0
- && mCurEnd <= mEST.getText().length()) {
- if (mCurStart < mCurEnd) {
- mEST.setSelection(mCurStart, mCurEnd);
- mState = STATE_SELECTED;
- } else if (mCurStart > mCurEnd) {
- mEST.setSelection(mCurEnd, mCurStart);
- mState = STATE_SELECTED;
- } else {
- mState = STATE_SELECT_ON;
- }
- } else {
- Log.e(LOG_TAG, "Select is on, but cursor positions are illigal.:"
- + mEST.getText().length() + "," + mCurStart + "," + mCurEnd);
- }
- }
-
- private void unsetSelect() {
- if (DBG) {
- Log.d(LOG_TAG, "--- offSelect");
- }
- //MetaKeyKeyListener.stopSelecting(mEST, mEST.getText());
- stopSelecting(mEST, mEST.getText());
- int currpos = mEST.getSelectionStart();
- mEST.setSelection(currpos, currpos);
- mState = STATE_SELECT_OFF;
- }
-
- private void setSelectStartPos() {
- if (DBG) {
- Log.d(LOG_TAG, "--- setSelectStartPos");
- }
- mCurStart = mEST.getSelectionStart();
- mState = STATE_SELECT_ON;
- }
-
- private void setSelectEndPos() {
- if (mEST.getSelectionEnd() == mCurStart) {
- setEndPos(mEST.getSelectionStart());
- } else {
- setEndPos(mEST.getSelectionEnd());
- }
- }
-
- public void setEndPos(int pos) {
- if (DBG) {
- Log.d(LOG_TAG, "--- setSelectedEndPos:" + pos);
- }
- mCurEnd = pos;
- setSelection();
- }
-
- private boolean isWaitingNextAction() {
- if (DBG) {
- Log.d(LOG_TAG, "--- waitingNext:" + mCurStart + "," + mCurEnd + "," + mState);
- }
- if (mCurStart == mCurEnd && mState == STATE_SELECT_FIX) {
- waitSelection();
- return true;
- } else {
- resumeSelection();
- return false;
- }
- }
-
- private void waitSelection() {
- if (DBG) {
- Log.d(LOG_TAG, "--- waitSelection");
- }
- mWaitInputFlag = true;
- if (mCurStart == mCurEnd) {
- mState = STATE_SELECT_ON;
- } else {
- mState = STATE_SELECTED;
- }
- //MetaKeyKeyListener.startSelecting(mEST, mEST.getText());
- startSelecting(mEST, mEST.getText());
- }
-
- private void resumeSelection() {
- if (DBG) {
- Log.d(LOG_TAG, "--- resumeSelection");
- }
- mWaitInputFlag = false;
- mState = STATE_SELECT_FIX;
- //MetaKeyKeyListener.stopSelecting(mEST, mEST.getText());
- stopSelecting(mEST, mEST.getText());
- }
-
- private boolean isTextSelected() {
- return (mState == STATE_SELECTED || mState == STATE_SELECT_FIX);
- }
-
- private void setStyledTextSpan(Object span, int start, int end) {
- if (DBG) {
- Log.d(LOG_TAG, "--- setStyledTextSpan:" + mMode + "," + start + "," + end);
- }
- int min = Math.min(start, end);
- int max = Math.max(start, end);
- mEST.getText().setSpan(span, min, max, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- Selection.setSelection(mEST.getText(), max);
- }
-
- private void setLineStyledTextSpan(Object span) {
- int min = Math.min(mCurStart, mCurEnd);
- int max = Math.max(mCurStart, mCurEnd);
- int current = mEST.getSelectionStart();
- int start = findLineStart(mEST.getText(), min);
- int end = findLineEnd(mEST.getText(), max);
- if (start == end) {
- mEST.getText().insert(end, "\n");
- setStyledTextSpan(span, start, end + 1);
- } else {
- setStyledTextSpan(span, start, end);
- }
- Selection.setSelection(mEST.getText(), current);
- }
-
- private void changeSizeSelectedText(int size) {
- if (mCurStart != mCurEnd) {
- setStyledTextSpan(new AbsoluteSizeSpan(size), mCurStart, mCurEnd);
- } else {
- Log.e(LOG_TAG, "---changeSize: Size of the span is zero");
- }
- }
-
- private void changeColorSelectedText(int color) {
- if (mCurStart != mCurEnd) {
- setStyledTextSpan(new ForegroundColorSpan(color), mCurStart, mCurEnd);
- } else {
- Log.e(LOG_TAG, "---changeColor: Size of the span is zero");
- }
- }
-
- private void changeAlign(Layout.Alignment align) {
- setLineStyledTextSpan(new AlignmentSpan.Standard(align));
- }
-
- private void addTelop() {
- addMarquee(MarqueeSpan.ALTERNATE);
- }
-
- private void addSwing() {
- addMarquee(MarqueeSpan.SCROLL);
- }
-
- private void addMarquee(int marquee) {
- if (DBG) {
- Log.d(LOG_TAG, "--- addMarquee:" + marquee);
- }
- setLineStyledTextSpan(new MarqueeSpan(marquee, mEST.getBackgroundColor()));
- }
-
- private void insertImageSpan(DynamicDrawableSpan span, int curpos) {
- if (DBG) {
- Log.d(LOG_TAG, "--- insertImageSpan:");
- }
- if (span != null && span.getDrawable() != null) {
- mEST.getText().insert(curpos, "" + IMAGECHAR);
- mEST.getText().setSpan(span, curpos, curpos + 1,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- mEST.notifyStateChanged(mMode, mState);
- } else {
- Log.e(LOG_TAG, "--- insertImageSpan: null span was inserted");
- mEST.sendHintMessage(HINT_MSG_BIG_SIZE_ERROR);
- }
- }
-
- private int findLineStart(Editable text, int current) {
- int pos = current;
- for (; pos > 0; pos--) {
- if (text.charAt(pos - 1) == '\n') {
- break;
- }
- }
- if (DBG) {
- Log.d(LOG_TAG, "--- findLineStart:" + current + "," + text.length() + ","
- + pos);
- }
- return pos;
- }
-
- private int findLineEnd(Editable text, int current) {
- int pos = current;
- for (; pos < text.length(); pos++) {
- if (text.charAt(pos) == '\n') {
- pos++;
- break;
- }
- }
- if (DBG) {
- Log.d(LOG_TAG, "--- findLineEnd:" + current + "," + text.length() + "," + pos);
- }
- return pos;
- }
-
- // Only for debug.
- private void dumpSpannableString(CharSequence txt) {
- if (txt instanceof Spannable) {
- Spannable spannable = (Spannable) txt;
- int len = spannable.length();
- if (DBG) {
- Log.d(TAG, "--- dumpSpannableString, txt:" + spannable + ", len:" + len);
- }
- Object[] styles = spannable.getSpans(0, len, Object.class);
- for (Object style : styles) {
- if (DBG) {
- Log.d(TAG,
- "--- dumpSpannableString, class:" + style + ","
- + spannable.getSpanStart(style) + ","
- + spannable.getSpanEnd(style) + ","
- + spannable.getSpanFlags(style));
- }
- }
- }
- }
-
- public void showSoftKey() {
- showSoftKey(mEST.getSelectionStart(), mEST.getSelectionEnd());
- }
-
- public void showSoftKey(int oldSelStart, int oldSelEnd) {
- if (DBG) {
- Log.d(LOG_TAG, "--- showsoftkey");
- }
- if (!mEST.isFocused() || isSoftKeyBlocked()) {
- return;
- }
- mSkr.mNewStart = Selection.getSelectionStart(mEST.getText());
- mSkr.mNewEnd = Selection.getSelectionEnd(mEST.getText());
- InputMethodManager imm =
- (InputMethodManager) getContext().getSystemService(
- Context.INPUT_METHOD_SERVICE);
- if (imm.showSoftInput(mEST, 0, mSkr) && mSkr != null) {
- Selection.setSelection(getText(), oldSelStart, oldSelEnd);
- }
- }
-
- public void hideSoftKey() {
- if (DBG) {
- Log.d(LOG_TAG, "--- hidesoftkey");
- }
- if (!mEST.isFocused()) {
- return;
- }
- mSkr.mNewStart = Selection.getSelectionStart(mEST.getText());
- mSkr.mNewEnd = Selection.getSelectionEnd(mEST.getText());
- InputMethodManager imm =
- (InputMethodManager) mEST.getContext().getSystemService(
- Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(mEST.getWindowToken(), 0, mSkr);
- }
-
- public void blockSoftKey() {
- if (DBG) {
- Log.d(LOG_TAG, "--- blockSoftKey:");
- }
- hideSoftKey();
- mSoftKeyBlockFlag = true;
- }
-
- public void unblockSoftKey() {
- if (DBG) {
- Log.d(LOG_TAG, "--- unblockSoftKey:");
- }
- mSoftKeyBlockFlag = false;
- }
- }
-
- private class StyledTextHtmlStandard implements StyledTextHtmlConverter {
- public String toHtml(Spanned text) {
- return Html.toHtml(text);
- }
-
- public String toHtml(Spanned text, boolean escapeNonAsciiChar) {
- return Html.toHtml(text);
- }
-
- public String toHtml(Spanned text, boolean escapeNonAsciiChar, int width, float scale) {
- return Html.toHtml(text);
- }
-
- public Spanned fromHtml(String source) {
- return Html.fromHtml(source);
- }
-
- public Spanned fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler) {
- return Html.fromHtml(source, imageGetter, tagHandler);
- }
- }
-
- private class StyledTextConverter {
- private EditStyledText mEST;
- private StyledTextHtmlConverter mHtml;
-
- public StyledTextConverter(EditStyledText est, StyledTextHtmlConverter html) {
- mEST = est;
- mHtml = html;
- }
-
- public void setStyledTextHtmlConverter(StyledTextHtmlConverter html) {
- mHtml = html;
- }
-
- public String getHtml(boolean escapeFlag) {
- mEST.clearComposingText();
- mEST.onRefreshZeoWidthChar();
- String htmlBody = mHtml.toHtml(mEST.getText(), escapeFlag);
- if (DBG) {
- Log.d(TAG, "--- getHtml:" + htmlBody);
- }
- return htmlBody;
- }
-
- public String getPreviewHtml() {
- mEST.clearComposingText();
- mEST.onRefreshZeoWidthChar();
- String html =
- mHtml.toHtml(mEST.getText(), true, getMaxImageWidthDip(),
- getPaddingScale());
- int bgColor = mEST.getBackgroundColor();
- html =
- String.format("<body bgcolor=\"#%02X%02X%02X\">%s</body>",
- Color.red(bgColor), Color.green(bgColor), Color.blue(bgColor),
- html);
- if (DBG) {
- Log.d(TAG, "--- getPreviewHtml:" + html + "," + mEST.getWidth());
- }
- return html;
- }
-
- public void getUriArray(ArrayList<Uri> uris, Editable text) {
- uris.clear();
- if (DBG) {
- Log.d(TAG, "--- getUriArray:");
- }
- int len = text.length();
- int next;
- for (int i = 0; i < text.length(); i = next) {
- next = text.nextSpanTransition(i, len, ImageSpan.class);
- ImageSpan[] images = text.getSpans(i, next, ImageSpan.class);
- for (int j = 0; j < images.length; j++) {
- if (DBG) {
- Log.d(TAG, "--- getUriArray: foundArray" + images[j].getSource());
- }
- uris.add(Uri.parse(images[j].getSource()));
- }
- }
- }
-
- public void SetHtml(String html) {
- final Spanned spanned = mHtml.fromHtml(html, new Html.ImageGetter() {
- public Drawable getDrawable(String src) {
- Log.d(TAG, "--- sethtml: src=" + src);
- if (src.startsWith("content://")) {
- Uri uri = Uri.parse(src);
- try {
- Drawable drawable = null;
- Bitmap bitmap = null;
- System.gc();
- InputStream is =
- mEST.getContext().getContentResolver().openInputStream(uri);
- BitmapFactory.Options opt = new BitmapFactory.Options();
- opt.inJustDecodeBounds = true;
- BitmapFactory.decodeStream(is, null, opt);
- is.close();
- is = mEST.getContext().getContentResolver().openInputStream(uri);
- int width, height;
- width = opt.outWidth;
- height = opt.outHeight;
- if (opt.outWidth > getMaxImageWidthPx()) {
- width = getMaxImageWidthPx();
- height = height * getMaxImageWidthPx() / opt.outWidth;
- Rect padding = new Rect(0, 0, width, height);
- bitmap = BitmapFactory.decodeStream(is, padding, null);
- } else {
- bitmap = BitmapFactory.decodeStream(is);
- }
- drawable = new BitmapDrawable(
- mEST.getContext().getResources(), bitmap);
- drawable.setBounds(0, 0, width, height);
- is.close();
- return drawable;
- } catch (Exception e) {
- Log.e(TAG, "--- set html: Failed to loaded content " + uri, e);
- return null;
- } catch (OutOfMemoryError e) {
- Log.e(TAG, "OutOfMemoryError");
- mEST.setHint(HINT_MSG_BIG_SIZE_ERROR);
-
- return null;
- }
- }
- return null;
- }
- }, null);
- mEST.setText(spanned);
- }
- }
-
- private static class SoftKeyReceiver extends ResultReceiver {
- int mNewStart;
- int mNewEnd;
- EditStyledText mEST;
-
- SoftKeyReceiver(EditStyledText est) {
- super(est.getHandler());
- mEST = est;
- }
-
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- if (resultCode != InputMethodManager.RESULT_SHOWN) {
- Selection.setSelection(mEST.getText(), mNewStart, mNewEnd);
- }
- }
- }
-
- public static class SavedStyledTextState extends BaseSavedState {
- public int mBackgroundColor;
-
- SavedStyledTextState(Parcelable superState) {
- super(superState);
- }
-
- @Override
- public void writeToParcel(Parcel out, int flags) {
- super.writeToParcel(out, flags);
- out.writeInt(mBackgroundColor);
- }
-
- @Override
- public String toString() {
- return "EditStyledText.SavedState{"
- + Integer.toHexString(System.identityHashCode(this)) + " bgcolor="
- + mBackgroundColor + "}";
- }
- }
-
- private static class StyledTextDialog {
- private static final int TYPE_FOREGROUND = 0;
- private static final int TYPE_BACKGROUND = 1;
- private Builder mBuilder;
- private AlertDialog mAlertDialog;
- private CharSequence mColorTitle;
- private CharSequence mSizeTitle;
- private CharSequence mAlignTitle;
- private CharSequence mMarqueeTitle;
- private CharSequence[] mColorNames;
- private CharSequence[] mColorInts;
- private CharSequence[] mSizeNames;
- private CharSequence[] mSizeDisplayInts;
- private CharSequence[] mSizeSendInts;
- private CharSequence[] mAlignNames;
- private CharSequence[] mMarqueeNames;
- private CharSequence mColorDefaultMessage;
- private EditStyledText mEST;
-
- public StyledTextDialog(EditStyledText est) {
- mEST = est;
- }
-
- public void setBuilder(Builder builder) {
- mBuilder = builder;
- }
-
- public void setColorAlertParams(CharSequence colortitle, CharSequence[] colornames,
- CharSequence[] colorInts, CharSequence defaultColorMessage) {
- mColorTitle = colortitle;
- mColorNames = colornames;
- mColorInts = colorInts;
- mColorDefaultMessage = defaultColorMessage;
- }
-
- public void setSizeAlertParams(CharSequence sizetitle, CharSequence[] sizenames,
- CharSequence[] sizedisplayints, CharSequence[] sizesendints) {
- mSizeTitle = sizetitle;
- mSizeNames = sizenames;
- mSizeDisplayInts = sizedisplayints;
- mSizeSendInts = sizesendints;
- }
-
- public void setAlignAlertParams(CharSequence aligntitle, CharSequence[] alignnames) {
- mAlignTitle = aligntitle;
- mAlignNames = alignnames;
- }
-
- public void setMarqueeAlertParams(CharSequence marqueetitle,
- CharSequence[] marqueenames) {
- mMarqueeTitle = marqueetitle;
- mMarqueeNames = marqueenames;
- }
-
- private boolean checkColorAlertParams() {
- if (DBG) {
- Log.d(TAG, "--- checkParams");
- }
- if (mBuilder == null) {
- Log.e(TAG, "--- builder is null.");
- return false;
- } else if (mColorTitle == null || mColorNames == null || mColorInts == null) {
- Log.e(TAG, "--- color alert params are null.");
- return false;
- } else if (mColorNames.length != mColorInts.length) {
- Log.e(TAG, "--- the length of color alert params are " + "different.");
- return false;
- }
- return true;
- }
-
- private boolean checkSizeAlertParams() {
- if (DBG) {
- Log.d(TAG, "--- checkParams");
- }
- if (mBuilder == null) {
- Log.e(TAG, "--- builder is null.");
- return false;
- } else if (mSizeTitle == null || mSizeNames == null || mSizeDisplayInts == null
- || mSizeSendInts == null) {
- Log.e(TAG, "--- size alert params are null.");
- return false;
- } else if (mSizeNames.length != mSizeDisplayInts.length
- && mSizeSendInts.length != mSizeDisplayInts.length) {
- Log.e(TAG, "--- the length of size alert params are " + "different.");
- return false;
- }
- return true;
- }
-
- private boolean checkAlignAlertParams() {
- if (DBG) {
- Log.d(TAG, "--- checkAlignAlertParams");
- }
- if (mBuilder == null) {
- Log.e(TAG, "--- builder is null.");
- return false;
- } else if (mAlignTitle == null) {
- Log.e(TAG, "--- align alert params are null.");
- return false;
- }
- return true;
- }
-
- private boolean checkMarqueeAlertParams() {
- if (DBG) {
- Log.d(TAG, "--- checkMarqueeAlertParams");
- }
- if (mBuilder == null) {
- Log.e(TAG, "--- builder is null.");
- return false;
- } else if (mMarqueeTitle == null) {
- Log.e(TAG, "--- Marquee alert params are null.");
- return false;
- }
- return true;
- }
-
- private void buildDialogue(CharSequence title, CharSequence[] names,
- DialogInterface.OnClickListener l) {
- mBuilder.setTitle(title);
- mBuilder.setIcon(0);
- mBuilder.setPositiveButton(null, null);
- mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mEST.onStartEdit();
- }
- });
- mBuilder.setItems(names, l);
- mBuilder.setView(null);
- mBuilder.setCancelable(true);
- mBuilder.setOnCancelListener(new OnCancelListener() {
- public void onCancel(DialogInterface arg0) {
- if (DBG) {
- Log.d(TAG, "--- oncancel");
- }
- mEST.onStartEdit();
- }
- });
- mBuilder.show();
- }
-
- private void buildAndShowColorDialogue(int type, CharSequence title, int[] colors) {
- final int HORIZONTAL_ELEMENT_NUM = 5;
- final int BUTTON_SIZE = mEST.dipToPx(50);
- final int BUTTON_MERGIN = mEST.dipToPx(2);
- final int BUTTON_PADDING = mEST.dipToPx(15);
- mBuilder.setTitle(title);
- mBuilder.setIcon(0);
- mBuilder.setPositiveButton(null, null);
- mBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mEST.onStartEdit();
- }
- });
- mBuilder.setItems(null, null);
- LinearLayout verticalLayout = new LinearLayout(mEST.getContext());
- verticalLayout.setOrientation(LinearLayout.VERTICAL);
- verticalLayout.setGravity(Gravity.CENTER_HORIZONTAL);
- verticalLayout.setPadding(BUTTON_PADDING, BUTTON_PADDING, BUTTON_PADDING,
- BUTTON_PADDING);
- LinearLayout horizontalLayout = null;
- for (int i = 0; i < colors.length; i++) {
- if (i % HORIZONTAL_ELEMENT_NUM == 0) {
- horizontalLayout = new LinearLayout(mEST.getContext());
- verticalLayout.addView(horizontalLayout);
- }
- Button button = new Button(mEST.getContext());
- button.setHeight(BUTTON_SIZE);
- button.setWidth(BUTTON_SIZE);
- ColorPaletteDrawable cp =
- new ColorPaletteDrawable(colors[i], BUTTON_SIZE, BUTTON_SIZE,
- BUTTON_MERGIN);
- button.setBackgroundDrawable(cp);
- button.setDrawingCacheBackgroundColor(colors[i]);
- if (type == TYPE_FOREGROUND) {
- button.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- mEST.setItemColor(view.getDrawingCacheBackgroundColor());
- if (mAlertDialog != null) {
- mAlertDialog.setView(null);
- mAlertDialog.dismiss();
- mAlertDialog = null;
- } else {
- Log.e(TAG,
- "--- buildAndShowColorDialogue: can't find alertDialog");
- }
- }
- });
- } else if (type == TYPE_BACKGROUND) {
- button.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- mEST.setBackgroundColor(view.getDrawingCacheBackgroundColor());
- if (mAlertDialog != null) {
- mAlertDialog.setView(null);
- mAlertDialog.dismiss();
- mAlertDialog = null;
- } else {
- Log.e(TAG,
- "--- buildAndShowColorDialogue: can't find alertDialog");
- }
- }
- });
- }
- horizontalLayout.addView(button);
- }
-
- if (type == TYPE_BACKGROUND) {
- mBuilder.setPositiveButton(mColorDefaultMessage,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mEST.setBackgroundColor(DEFAULT_TRANSPARENT_COLOR);
- }
- });
- } else if (type == TYPE_FOREGROUND) {
- mBuilder.setPositiveButton(mColorDefaultMessage,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- mEST.setItemColor(DEFAULT_FOREGROUND_COLOR);
- }
- });
- }
-
- mBuilder.setView(verticalLayout);
- mBuilder.setCancelable(true);
- mBuilder.setOnCancelListener(new OnCancelListener() {
- public void onCancel(DialogInterface arg0) {
- mEST.onStartEdit();
- }
- });
- mAlertDialog = mBuilder.show();
- }
-
- private void onShowForegroundColorAlertDialog() {
- if (DBG) {
- Log.d(TAG, "--- onShowForegroundColorAlertDialog");
- }
- if (!checkColorAlertParams()) {
- return;
- }
- int[] colorints = new int[mColorInts.length];
- for (int i = 0; i < colorints.length; i++) {
- colorints[i] = Integer.parseInt((String) mColorInts[i], 16) - 0x01000000;
- }
- buildAndShowColorDialogue(TYPE_FOREGROUND, mColorTitle, colorints);
- }
-
- private void onShowBackgroundColorAlertDialog() {
- if (DBG) {
- Log.d(TAG, "--- onShowBackgroundColorAlertDialog");
- }
- if (!checkColorAlertParams()) {
- return;
- }
- int[] colorInts = new int[mColorInts.length];
- for (int i = 0; i < colorInts.length; i++) {
- colorInts[i] = Integer.parseInt((String) mColorInts[i], 16) - 0x01000000;
- }
- buildAndShowColorDialogue(TYPE_BACKGROUND, mColorTitle, colorInts);
- }
-
- private void onShowSizeAlertDialog() {
- if (DBG) {
- Log.d(TAG, "--- onShowSizeAlertDialog");
- }
- if (!checkSizeAlertParams()) {
- return;
- }
- buildDialogue(mSizeTitle, mSizeNames, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Log.d(TAG, "mBuilder.onclick:" + which);
- int size =
- mEST.dipToPx(Integer.parseInt((String) mSizeDisplayInts[which]));
- mEST.setItemSize(size);
- }
- });
- }
-
- private void onShowAlignAlertDialog() {
- if (DBG) {
- Log.d(TAG, "--- onShowAlignAlertDialog");
- }
- if (!checkAlignAlertParams()) {
- return;
- }
- buildDialogue(mAlignTitle, mAlignNames, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- Layout.Alignment align = Layout.Alignment.ALIGN_NORMAL;
- switch (which) {
- case 0:
- align = Layout.Alignment.ALIGN_NORMAL;
- break;
- case 1:
- align = Layout.Alignment.ALIGN_CENTER;
- break;
- case 2:
- align = Layout.Alignment.ALIGN_OPPOSITE;
- break;
- default:
- Log.e(TAG, "--- onShowAlignAlertDialog: got illigal align.");
- break;
- }
- mEST.setAlignment(align);
- }
- });
- }
-
- private void onShowMarqueeAlertDialog() {
- if (DBG) {
- Log.d(TAG, "--- onShowMarqueeAlertDialog");
- }
- if (!checkMarqueeAlertParams()) {
- return;
- }
- buildDialogue(mMarqueeTitle, mMarqueeNames, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- if (DBG) {
- Log.d(TAG, "mBuilder.onclick:" + which);
- }
- mEST.setMarquee(which);
- }
- });
- }
- }
-
- private class MenuHandler implements MenuItem.OnMenuItemClickListener {
- public boolean onMenuItemClick(MenuItem item) {
- return onTextContextMenuItem(item.getItemId());
- }
- }
-
- private static class StyledTextArrowKeyMethod extends ArrowKeyMovementMethod {
- EditorManager mManager;
- String LOG_TAG = "StyledTextArrowKeyMethod";
-
- StyledTextArrowKeyMethod(EditorManager manager) {
- super();
- mManager = manager;
- }
-
- @Override
- public boolean
- onKeyDown(TextView widget, Spannable buffer, int keyCode, KeyEvent event) {
- if (DBG) {
- Log.d(LOG_TAG, "---onkeydown:" + keyCode);
- }
- mManager.unsetTextComposingMask();
- if (mManager.getSelectState() == STATE_SELECT_ON
- || mManager.getSelectState() == STATE_SELECTED) {
- return executeDown(widget, buffer, keyCode);
- } else {
- return super.onKeyDown(widget, buffer, keyCode, event);
- }
- }
-
- private int getEndPos(TextView widget) {
- int end;
- if (widget.getSelectionStart() == mManager.getSelectionStart()) {
- end = widget.getSelectionEnd();
- } else {
- end = widget.getSelectionStart();
- }
- return end;
- }
-
- protected boolean up(TextView widget, Spannable buffer) {
- if (DBG) {
- Log.d(LOG_TAG, "--- up:");
- }
- Layout layout = widget.getLayout();
- int end = getEndPos(widget);
- int line = layout.getLineForOffset(end);
- if (line > 0) {
- int to;
- if (layout.getParagraphDirection(line) == layout
- .getParagraphDirection(line - 1)) {
- float h = layout.getPrimaryHorizontal(end);
- to = layout.getOffsetForHorizontal(line - 1, h);
- } else {
- to = layout.getLineStart(line - 1);
- }
- mManager.setEndPos(to);
- mManager.onCursorMoved();
- }
- return true;
- }
-
- protected boolean down(TextView widget, Spannable buffer) {
- if (DBG) {
- Log.d(LOG_TAG, "--- down:");
- }
- Layout layout = widget.getLayout();
- int end = getEndPos(widget);
- int line = layout.getLineForOffset(end);
- if (line < layout.getLineCount() - 1) {
- int to;
- if (layout.getParagraphDirection(line) == layout
- .getParagraphDirection(line + 1)) {
- float h = layout.getPrimaryHorizontal(end);
- to = layout.getOffsetForHorizontal(line + 1, h);
- } else {
- to = layout.getLineStart(line + 1);
- }
- mManager.setEndPos(to);
- mManager.onCursorMoved();
- }
- return true;
- }
-
- protected boolean left(TextView widget, Spannable buffer) {
- if (DBG) {
- Log.d(LOG_TAG, "--- left:");
- }
- Layout layout = widget.getLayout();
- int to = layout.getOffsetToLeftOf(getEndPos(widget));
- mManager.setEndPos(to);
- mManager.onCursorMoved();
- return true;
- }
-
- protected boolean right(TextView widget, Spannable buffer) {
- if (DBG) {
- Log.d(LOG_TAG, "--- right:");
- }
- Layout layout = widget.getLayout();
- int to = layout.getOffsetToRightOf(getEndPos(widget));
- mManager.setEndPos(to);
- mManager.onCursorMoved();
- return true;
- }
-
- private boolean executeDown(TextView widget, Spannable buffer, int keyCode) {
- if (DBG) {
- Log.d(LOG_TAG, "--- executeDown: " + keyCode);
- }
- boolean handled = false;
-
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_UP:
- handled |= up(widget, buffer);
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- handled |= down(widget, buffer);
- break;
- case KeyEvent.KEYCODE_DPAD_LEFT:
- handled |= left(widget, buffer);
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- handled |= right(widget, buffer);
- break;
- case KeyEvent.KEYCODE_DPAD_CENTER:
- mManager.onFixSelectedItem();
- handled = true;
- break;
- }
- return handled;
- }
- }
-
- public static class StyledTextInputConnection extends InputConnectionWrapper {
- EditStyledText mEST;
-
- public StyledTextInputConnection(InputConnection target, EditStyledText est) {
- super(target, true);
- mEST = est;
- }
-
- @Override
- public boolean commitText(CharSequence text, int newCursorPosition) {
- if (DBG) {
- Log.d(TAG, "--- commitText:");
- }
- mEST.mManager.unsetTextComposingMask();
- return super.commitText(text, newCursorPosition);
- }
-
- @Override
- public boolean finishComposingText() {
- if (DBG) {
- Log.d(TAG, "--- finishcomposing:");
- }
- if (!mEST.isSoftKeyBlocked() && !mEST.isButtonsFocused() && !mEST.isEditting()) {
- // TODO onEndEdit isn't called temporally .
- mEST.onEndEdit();
- }
- return super.finishComposingText();
- }
- }
-
- public static class EditStyledTextSpans {
- private static final String LOG_TAG = "EditStyledTextSpan";
-
- public static class HorizontalLineSpan extends DynamicDrawableSpan {
- HorizontalLineDrawable mDrawable;
-
- public HorizontalLineSpan(int color, int width, Spannable spannable) {
- super(ALIGN_BOTTOM);
- mDrawable = new HorizontalLineDrawable(color, width, spannable);
- }
-
- @Override
- public Drawable getDrawable() {
- return mDrawable;
- }
-
- public void resetWidth(int width) {
- mDrawable.renewBounds(width);
- }
-
- public int getColor() {
- return mDrawable.getPaint().getColor();
- }
- }
-
- public static class MarqueeSpan extends CharacterStyle {
- public static final int SCROLL = 0;
- public static final int ALTERNATE = 1;
- public static final int NOTHING = 2;
- private int mType;
- private int mMarqueeColor;
-
- public MarqueeSpan(int type, int bgc) {
- mType = type;
- checkType(type);
- mMarqueeColor = getMarqueeColor(type, bgc);
- }
-
- public MarqueeSpan(int type) {
- this(type, EditStyledText.DEFAULT_TRANSPARENT_COLOR);
- }
-
- public int getType() {
- return mType;
- }
-
- public void resetColor(int bgc) {
- mMarqueeColor = getMarqueeColor(mType, bgc);
- }
-
- private int getMarqueeColor(int type, int bgc) {
- int THRESHOLD = 128;
- int a = Color.alpha(bgc);
- int r = Color.red(bgc);
- int g = Color.green(bgc);
- int b = Color.blue(bgc);
- if (a == 0) {
- a = 0x80;
- }
- switch (type) {
- case SCROLL:
- if (r > THRESHOLD) {
- r = r / 2;
- } else {
- r = (0XFF - r) / 2;
- }
- break;
- case ALTERNATE:
- if (g > THRESHOLD) {
- g = g / 2;
- } else {
- g = (0XFF - g) / 2;
- }
- break;
- case NOTHING:
- return DEFAULT_TRANSPARENT_COLOR;
- default:
- Log.e(TAG, "--- getMarqueeColor: got illigal marquee ID.");
- return DEFAULT_TRANSPARENT_COLOR;
- }
- return Color.argb(a, r, g, b);
- }
-
- private boolean checkType(int type) {
- if (type == SCROLL || type == ALTERNATE) {
- return true;
- } else {
- Log.e(LOG_TAG, "--- Invalid type of MarqueeSpan");
- return false;
- }
- }
-
- @Override
- public void updateDrawState(TextPaint tp) {
- tp.bgColor = mMarqueeColor;
- }
- }
-
- public static class RescalableImageSpan extends ImageSpan {
- Uri mContentUri;
- private Drawable mDrawable;
- private Context mContext;
- public int mIntrinsicWidth = -1;
- public int mIntrinsicHeight = -1;
- private final int MAXWIDTH;
-
- public RescalableImageSpan(Context context, Uri uri, int maxwidth) {
- super(context, uri);
- mContext = context;
- mContentUri = uri;
- MAXWIDTH = maxwidth;
- }
-
- public RescalableImageSpan(Context context, int resourceId, int maxwidth) {
- super(context, resourceId);
- mContext = context;
- MAXWIDTH = maxwidth;
- }
-
- @Override
- public Drawable getDrawable() {
- if (mDrawable != null) {
- return mDrawable;
- } else if (mContentUri != null) {
- Bitmap bitmap = null;
- System.gc();
- try {
- InputStream is =
- mContext.getContentResolver().openInputStream(mContentUri);
- BitmapFactory.Options opt = new BitmapFactory.Options();
- opt.inJustDecodeBounds = true;
- BitmapFactory.decodeStream(is, null, opt);
- is.close();
- is = mContext.getContentResolver().openInputStream(mContentUri);
- int width, height;
- width = opt.outWidth;
- height = opt.outHeight;
- mIntrinsicWidth = width;
- mIntrinsicHeight = height;
- if (opt.outWidth > MAXWIDTH) {
- width = MAXWIDTH;
- height = height * MAXWIDTH / opt.outWidth;
- Rect padding = new Rect(0, 0, width, height);
- bitmap = BitmapFactory.decodeStream(is, padding, null);
- } else {
- bitmap = BitmapFactory.decodeStream(is);
- }
- mDrawable = new BitmapDrawable(mContext.getResources(), bitmap);
- mDrawable.setBounds(0, 0, width, height);
- is.close();
- } catch (Exception e) {
- Log.e(LOG_TAG, "Failed to loaded content " + mContentUri, e);
- return null;
- } catch (OutOfMemoryError e) {
- Log.e(LOG_TAG, "OutOfMemoryError");
- return null;
- }
- } else {
- mDrawable = super.getDrawable();
- rescaleBigImage(mDrawable);
- mIntrinsicWidth = mDrawable.getIntrinsicWidth();
- mIntrinsicHeight = mDrawable.getIntrinsicHeight();
- }
- return mDrawable;
- }
-
- public boolean isOverSize() {
- return (getDrawable().getIntrinsicWidth() > MAXWIDTH);
- }
-
- public Uri getContentUri() {
- return mContentUri;
- }
-
- private void rescaleBigImage(Drawable image) {
- if (DBG) {
- Log.d(LOG_TAG, "--- rescaleBigImage:");
- }
- if (MAXWIDTH < 0) {
- return;
- }
- int image_width = image.getIntrinsicWidth();
- int image_height = image.getIntrinsicHeight();
- if (DBG) {
- Log.d(LOG_TAG, "--- rescaleBigImage:" + image_width + "," + image_height
- + "," + MAXWIDTH);
- }
- if (image_width > MAXWIDTH) {
- image_width = MAXWIDTH;
- image_height = image_height * MAXWIDTH / image_width;
- }
- image.setBounds(0, 0, image_width, image_height);
- }
- }
-
- public static class HorizontalLineDrawable extends ShapeDrawable {
- private Spannable mSpannable;
- private int mWidth;
- private static boolean DBG_HL = false;
-
- public HorizontalLineDrawable(int color, int width, Spannable spannable) {
- super(new RectShape());
- mSpannable = spannable;
- mWidth = width;
- renewColor(color);
- renewBounds(width);
- }
-
- @Override
- public void draw(Canvas canvas) {
- renewColor();
- Rect rect = new Rect(0, 9, mWidth, 11);
- canvas.drawRect(rect, getPaint());
- }
-
- public void renewBounds(int width) {
- int MARGIN = 20;
- int HEIGHT = 20;
- if (DBG_HL) {
- Log.d(LOG_TAG, "--- renewBounds:" + width);
- }
- if (width > MARGIN) {
- width -= MARGIN;
- }
- mWidth = width;
- setBounds(0, 0, width, HEIGHT);
- }
-
- private void renewColor(int color) {
- if (DBG_HL) {
- Log.d(LOG_TAG, "--- renewColor:" + color);
- }
- getPaint().setColor(color);
- }
-
- private void renewColor() {
- HorizontalLineSpan parent = getParentSpan();
- Spannable text = mSpannable;
- int start = text.getSpanStart(parent);
- int end = text.getSpanEnd(parent);
- ForegroundColorSpan[] spans =
- text.getSpans(start, end, ForegroundColorSpan.class);
- if (DBG_HL) {
- Log.d(LOG_TAG, "--- renewColor:" + spans.length);
- }
- if (spans.length > 0) {
- renewColor(spans[spans.length - 1].getForegroundColor());
- }
- }
-
- private HorizontalLineSpan getParentSpan() {
- Spannable text = mSpannable;
- HorizontalLineSpan[] images =
- text.getSpans(0, text.length(), HorizontalLineSpan.class);
- if (images.length > 0) {
- for (HorizontalLineSpan image : images) {
- if (image.getDrawable() == this) {
- return image;
- }
- }
- }
- Log.e(LOG_TAG, "---renewBounds: Couldn't find");
- return null;
- }
- }
- }
-
- public static class ColorPaletteDrawable extends ShapeDrawable {
- private Rect mRect;
-
- public ColorPaletteDrawable(int color, int width, int height, int mergin) {
- super(new RectShape());
- mRect = new Rect(mergin, mergin, width - mergin, height - mergin);
- getPaint().setColor(color);
- }
-
- @Override
- public void draw(Canvas canvas) {
- canvas.drawRect(mRect, getPaint());
- }
- }
-
- public class EditModeActions {
-
- private static final String TAG = "EditModeActions";
- private static final boolean DBG = true;
- private EditStyledText mEST;
- private EditorManager mManager;
- private StyledTextDialog mDialog;
-
- private int mMode = EditStyledText.MODE_NOTHING;
-
- private HashMap<Integer, EditModeActionBase> mActionMap =
- new HashMap<Integer, EditModeActionBase>();
-
- private NothingAction mNothingAction = new NothingAction();
- private CopyAction mCopyAction = new CopyAction();
- private PasteAction mPasteAction = new PasteAction();
- private SelectAction mSelectAction = new SelectAction();
- private CutAction mCutAction = new CutAction();
- private SelectAllAction mSelectAllAction = new SelectAllAction();
- private HorizontalLineAction mHorizontalLineAction = new HorizontalLineAction();
- private StopSelectionAction mStopSelectionAction = new StopSelectionAction();
- private ClearStylesAction mClearStylesAction = new ClearStylesAction();
- private ImageAction mImageAction = new ImageAction();
- private BackgroundColorAction mBackgroundColorAction = new BackgroundColorAction();
- private PreviewAction mPreviewAction = new PreviewAction();
- private CancelAction mCancelEditAction = new CancelAction();
- private TextViewAction mTextViewAction = new TextViewAction();
- private StartEditAction mStartEditAction = new StartEditAction();
- private EndEditAction mEndEditAction = new EndEditAction();
- private ResetAction mResetAction = new ResetAction();
- private ShowMenuAction mShowMenuAction = new ShowMenuAction();
- private AlignAction mAlignAction = new AlignAction();
- private TelopAction mTelopAction = new TelopAction();
- private SwingAction mSwingAction = new SwingAction();
- private MarqueeDialogAction mMarqueeDialogAction = new MarqueeDialogAction();
- private ColorAction mColorAction = new ColorAction();
- private SizeAction mSizeAction = new SizeAction();
-
- EditModeActions(EditStyledText est, EditorManager manager, StyledTextDialog dialog) {
- mEST = est;
- mManager = manager;
- mDialog = dialog;
- mActionMap.put(EditStyledText.MODE_NOTHING, mNothingAction);
- mActionMap.put(EditStyledText.MODE_COPY, mCopyAction);
- mActionMap.put(EditStyledText.MODE_PASTE, mPasteAction);
- mActionMap.put(EditStyledText.MODE_SELECT, mSelectAction);
- mActionMap.put(EditStyledText.MODE_CUT, mCutAction);
- mActionMap.put(EditStyledText.MODE_SELECTALL, mSelectAllAction);
- mActionMap.put(EditStyledText.MODE_HORIZONTALLINE, mHorizontalLineAction);
- mActionMap.put(EditStyledText.MODE_STOP_SELECT, mStopSelectionAction);
- mActionMap.put(EditStyledText.MODE_CLEARSTYLES, mClearStylesAction);
- mActionMap.put(EditStyledText.MODE_IMAGE, mImageAction);
- mActionMap.put(EditStyledText.MODE_BGCOLOR, mBackgroundColorAction);
- mActionMap.put(EditStyledText.MODE_PREVIEW, mPreviewAction);
- mActionMap.put(EditStyledText.MODE_CANCEL, mCancelEditAction);
- mActionMap.put(EditStyledText.MODE_TEXTVIEWFUNCTION, mTextViewAction);
- mActionMap.put(EditStyledText.MODE_START_EDIT, mStartEditAction);
- mActionMap.put(EditStyledText.MODE_END_EDIT, mEndEditAction);
- mActionMap.put(EditStyledText.MODE_RESET, mResetAction);
- mActionMap.put(EditStyledText.MODE_SHOW_MENU, mShowMenuAction);
- mActionMap.put(EditStyledText.MODE_ALIGN, mAlignAction);
- mActionMap.put(EditStyledText.MODE_TELOP, mTelopAction);
- mActionMap.put(EditStyledText.MODE_SWING, mSwingAction);
- mActionMap.put(EditStyledText.MODE_MARQUEE, mMarqueeDialogAction);
- mActionMap.put(EditStyledText.MODE_COLOR, mColorAction);
- mActionMap.put(EditStyledText.MODE_SIZE, mSizeAction);
- }
-
- public void addAction(int modeId, EditModeActionBase action) {
- mActionMap.put(modeId, action);
- }
-
- public void onAction(int newMode, Object[] params) {
- getAction(newMode).addParams(params);
- mMode = newMode;
- doNext(newMode);
- }
-
- public void onAction(int newMode, Object param) {
- onAction(newMode, new Object[] { param });
- }
-
- public void onAction(int newMode) {
- onAction(newMode, null);
- }
-
- public void onSelectAction() {
- doNext(EditStyledText.MODE_SELECT);
- }
-
- private EditModeActionBase getAction(int mode) {
- if (mActionMap.containsKey(mode)) {
- return mActionMap.get(mode);
- }
- return null;
- }
-
- public boolean doNext() {
- return doNext(mMode);
- }
-
- public boolean doNext(int mode) {
- if (DBG) {
- Log.d(TAG, "--- do the next action: " + mode + "," + mManager.getSelectState());
- }
- EditModeActionBase action = getAction(mode);
- if (action == null) {
- Log.e(TAG, "--- invalid action error.");
- return false;
- }
- switch (mManager.getSelectState()) {
- case EditStyledText.STATE_SELECT_OFF:
- return action.doNotSelected();
- case EditStyledText.STATE_SELECT_ON:
- return action.doStartPosIsSelected();
- case EditStyledText.STATE_SELECTED:
- return action.doEndPosIsSelected();
- case EditStyledText.STATE_SELECT_FIX:
- if (mManager.isWaitInput()) {
- return action.doSelectionIsFixedAndWaitingInput();
- } else {
- return action.doSelectionIsFixed();
- }
- default:
- return false;
- }
- }
-
- public class EditModeActionBase {
- private Object[] mParams;
-
- protected boolean canOverWrap() {
- return false;
- }
-
- protected boolean canSelect() {
- return false;
- }
-
- protected boolean canWaitInput() {
- return false;
- }
-
- protected boolean needSelection() {
- return false;
- }
-
- protected boolean isLine() {
- return false;
- }
-
- protected boolean doNotSelected() {
- return false;
- }
-
- protected boolean doStartPosIsSelected() {
- return doNotSelected();
- }
-
- protected boolean doEndPosIsSelected() {
- return doStartPosIsSelected();
- }
-
- protected boolean doSelectionIsFixed() {
- return doEndPosIsSelected();
- }
-
- protected boolean doSelectionIsFixedAndWaitingInput() {
- return doEndPosIsSelected();
- }
-
- protected boolean fixSelection() {
- mEST.finishComposingText();
- mManager.setSelectState(EditStyledText.STATE_SELECT_FIX);
- return true;
- }
-
- protected void addParams(Object[] o) {
- mParams = o;
- }
-
- protected Object getParam(int num) {
- if (mParams == null || num > mParams.length) {
- if (DBG) {
- Log.d(TAG, "--- Number of the parameter is out of bound.");
- }
- return null;
- } else {
- return mParams[num];
- }
- }
- }
-
- public class NothingAction extends EditModeActionBase {
- }
-
- public class TextViewActionBase extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- if (mManager.getEditMode() == EditStyledText.MODE_NOTHING
- || mManager.getEditMode() == EditStyledText.MODE_SELECT) {
- mManager.setEditMode(mMode);
- onSelectAction();
- return true;
- }
- return false;
- }
-
- @Override
- protected boolean doEndPosIsSelected() {
- if (mManager.getEditMode() == EditStyledText.MODE_NOTHING
- || mManager.getEditMode() == EditStyledText.MODE_SELECT) {
- mManager.setEditMode(mMode);
- fixSelection();
- doNext();
- return true;
- } else if (mManager.getEditMode() != mMode) {
- mManager.resetEdit();
- mManager.setEditMode(mMode);
- doNext();
- return true;
- }
- return false;
- }
- }
-
- public class TextViewAction extends TextViewActionBase {
- @Override
- protected boolean doEndPosIsSelected() {
- if (super.doEndPosIsSelected()) {
- return true;
- }
- Object param = getParam(0);
- if (param != null && param instanceof Integer) {
- mEST.onTextContextMenuItem((Integer) param);
- }
- mManager.resetEdit();
- return true;
- }
- }
-
- public class CopyAction extends TextViewActionBase {
- @Override
- protected boolean doEndPosIsSelected() {
- if (super.doEndPosIsSelected()) {
- return true;
- }
- mManager.copyToClipBoard();
- mManager.resetEdit();
- return true;
- }
- }
-
- public class CutAction extends TextViewActionBase {
- @Override
- protected boolean doEndPosIsSelected() {
- if (super.doEndPosIsSelected()) {
- return true;
- }
- mManager.cutToClipBoard();
- mManager.resetEdit();
- return true;
- }
- }
-
- public class SelectAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- if (mManager.isTextSelected()) {
- Log.e(TAG, "Selection is off, but selected");
- }
- mManager.setSelectStartPos();
- mEST.sendHintMessage(EditStyledText.HINT_MSG_SELECT_END);
- return true;
- }
-
- @Override
- protected boolean doStartPosIsSelected() {
- if (mManager.isTextSelected()) {
- Log.e(TAG, "Selection now start, but selected");
- }
- mManager.setSelectEndPos();
- mEST.sendHintMessage(EditStyledText.HINT_MSG_PUSH_COMPETE);
- if (mManager.getEditMode() != EditStyledText.MODE_SELECT) {
- doNext(mManager.getEditMode()); // doNextHandle needs edit mode in editor.
- }
- return true;
- }
-
- @Override
- protected boolean doSelectionIsFixed() {
- return false;
- }
- }
-
- public class PasteAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.pasteFromClipboard();
- mManager.resetEdit();
- return true;
- }
- }
-
- public class SelectAllAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.selectAll();
- return true;
- }
- }
-
- public class HorizontalLineAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.insertHorizontalLine();
- return true;
- }
- }
-
- public class ClearStylesAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.clearStyles();
- return true;
- }
- }
-
- public class StopSelectionAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.fixSelectionAndDoNextAction();
- return true;
- }
- }
-
- public class CancelAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mEST.cancelViewManagers();
- return true;
- }
- }
-
- public class ImageAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- Object param = getParam(0);
- if (param != null) {
- if (param instanceof Uri) {
- mManager.insertImageFromUri((Uri) param);
- } else if (param instanceof Integer) {
- mManager.insertImageFromResId((Integer) param);
- }
- } else {
- mEST.showInsertImageSelectAlertDialog();
- }
- return true;
- }
- }
-
- public class BackgroundColorAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mDialog.onShowBackgroundColorAlertDialog();
- return true;
- }
- }
-
- public class PreviewAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mEST.showPreview();
- return true;
- }
- }
-
- public class StartEditAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.startEdit();
- return true;
- }
- }
-
- public class EndEditAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.endEdit();
- return true;
- }
- }
-
- public class ResetAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mManager.resetEdit();
- return true;
- }
- }
-
- public class ShowMenuAction extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- mEST.showMenuAlertDialog();
- return true;
- }
- }
-
- public class SetSpanActionBase extends EditModeActionBase {
- @Override
- protected boolean doNotSelected() {
- if (mManager.getEditMode() == EditStyledText.MODE_NOTHING
- || mManager.getEditMode() == EditStyledText.MODE_SELECT) {
- mManager.setEditMode(mMode);
- mManager.setInternalSelection(mEST.getSelectionStart(),
- mEST.getSelectionEnd());
- fixSelection();
- doNext();
- return true;
- } else if (mManager.getEditMode() != mMode) {
- Log.d(TAG, "--- setspanactionbase" + mManager.getEditMode() + "," + mMode);
- if (!mManager.isWaitInput()) {
- mManager.resetEdit();
- mManager.setEditMode(mMode);
- } else {
- mManager.setEditMode(EditStyledText.MODE_NOTHING);
- mManager.setSelectState(EditStyledText.STATE_SELECT_OFF);
- }
- doNext();
- return true;
- }
- return false;
- }
-
- @Override
- protected boolean doStartPosIsSelected() {
- if (mManager.getEditMode() == EditStyledText.MODE_NOTHING
- || mManager.getEditMode() == EditStyledText.MODE_SELECT) {
- mManager.setEditMode(mMode);
- onSelectAction();
- return true;
- }
- return doNotSelected();
- }
-
- @Override
- protected boolean doEndPosIsSelected() {
- if (mManager.getEditMode() == EditStyledText.MODE_NOTHING
- || mManager.getEditMode() == EditStyledText.MODE_SELECT) {
- mManager.setEditMode(mMode);
- fixSelection();
- doNext();
- return true;
- }
- return doStartPosIsSelected();
- }
-
- @Override
- protected boolean doSelectionIsFixed() {
- if (doEndPosIsSelected()) {
- return true;
- }
- mEST.sendHintMessage(EditStyledText.HINT_MSG_NULL);
-
- return false;
- }
- }
-
- public class AlignAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mDialog.onShowAlignAlertDialog();
- return true;
- }
- }
-
- public class TelopAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mManager.setTelop();
- return true;
- }
- }
-
- public class SwingAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mManager.setSwing();
- return true;
- }
- }
-
- public class MarqueeDialogAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mDialog.onShowMarqueeAlertDialog();
- return true;
- }
- }
-
- public class ColorAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mDialog.onShowForegroundColorAlertDialog();
- return true;
- }
-
- @Override
- protected boolean doSelectionIsFixedAndWaitingInput() {
- if (super.doSelectionIsFixedAndWaitingInput()) {
- return true;
- }
- int size = mManager.getSizeWaitInput();
- mManager.setItemColor(mManager.getColorWaitInput(), false);
- // selection was resumed
- if (!mManager.isWaitInput()) {
- mManager.setItemSize(size, false);
- mManager.resetEdit();
- } else {
- fixSelection();
- mDialog.onShowForegroundColorAlertDialog();
- }
- return true;
- }
- }
-
- public class SizeAction extends SetSpanActionBase {
- @Override
- protected boolean doSelectionIsFixed() {
- if (super.doSelectionIsFixed()) {
- return true;
- }
- mDialog.onShowSizeAlertDialog();
- return true;
- }
-
- @Override
- protected boolean doSelectionIsFixedAndWaitingInput() {
- if (super.doSelectionIsFixedAndWaitingInput()) {
- return true;
- }
- int color = mManager.getColorWaitInput();
- mManager.setItemSize(mManager.getSizeWaitInput(), false);
- if (!mManager.isWaitInput()) {
- mManager.setItemColor(color, false);
- mManager.resetEdit();
- } else {
- fixSelection();
- mDialog.onShowSizeAlertDialog();
- }
- return true;
- }
- }
- }
-}