diff options
author | satok <satok@google.com> | 2010-07-01 13:24:26 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-07-01 13:24:26 -0700 |
commit | adfb59907a191773a6666b79bf9d591ff53ab6b1 (patch) | |
tree | af25de932af3f3965bf6b2c69a436b6f94ce6b64 /core/java/com | |
parent | e822c99511128db118d4192733e9cc0415fa155d (diff) | |
parent | fa57523b60dd335a227bff7fbddbf05ab0755b5d (diff) | |
download | frameworks_base-adfb59907a191773a6666b79bf9d591ff53ab6b1.zip frameworks_base-adfb59907a191773a6666b79bf9d591ff53ab6b1.tar.gz frameworks_base-adfb59907a191773a6666b79bf9d591ff53ab6b1.tar.bz2 |
Merge "Remove EditStyledText from the framekwork"
Diffstat (limited to 'core/java/com')
-rw-r--r-- | core/java/com/android/internal/widget/EditStyledText.java | 1663 |
1 files changed, 0 insertions, 1663 deletions
diff --git a/core/java/com/android/internal/widget/EditStyledText.java b/core/java/com/android/internal/widget/EditStyledText.java deleted file mode 100644 index 82197c0..0000000 --- a/core/java/com/android/internal/widget/EditStyledText.java +++ /dev/null @@ -1,1663 +0,0 @@ -/* - * Copyright (C) 2009 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.internal.widget; - -import java.io.InputStream; -import java.util.ArrayList; - -import android.app.AlertDialog.Builder; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -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.text.Editable; -import android.text.Html; -import android.text.Layout; -import android.text.Spannable; -import android.text.Spanned; -import android.text.method.ArrowKeyMovementMethod; -import android.text.style.AbsoluteSizeSpan; -import android.text.style.AlignmentSpan; -import android.text.style.CharacterStyle; -import android.text.style.ForegroundColorSpan; -import android.text.style.ImageSpan; -import android.text.style.ParagraphStyle; -import android.text.style.QuoteSpan; -import android.util.AttributeSet; -import android.util.Log; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.View; -import android.view.inputmethod.InputMethodManager; -import android.widget.EditText; -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 LOG_TAG = "EditStyledText"; - private static final boolean DBG = false; - - /** - * The 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; - - /** - * The state 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; - - /** - * The 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; - - - /** - * The help message strings. - */ - public static final int DEFAULT_BACKGROUND_COLOR = 0x00FFFFFF; - - /** - * EditStyledTextInterface provides functions for notifying messages to - * calling class. - */ - public interface EditStyledTextNotifier { - public void notifyHintMsg(int msgId); - public void notifyStateChanged(int mode, int state); - } - - private EditStyledTextNotifier mESTInterface; - - /** - * EditStyledTextEditorManager manages the flow and status of each - * function for editing styled text. - */ - private EditorManager mManager; - private StyledTextConverter mConverter; - private StyledTextDialog mDialog; - private Drawable mDefaultBackground; - private int mBackgroundColor; - - /** - * 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(); - } - - /** - * Set Notifier. - */ - public void setNotifier(EditStyledTextNotifier estInterface) { - mESTInterface = estInterface; - } - - /** - * 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) { - mDialog.setColorAlertParams(colortitle, colornames, colorints); - } - - /** - * 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); - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (mManager.isSoftKeyBlocked() && - event.getAction() == MotionEvent.ACTION_UP) { - cancelLongPress(); - } - final boolean superResult = super.onTouchEvent(event); - if (event.getAction() == MotionEvent.ACTION_UP) { - if (DBG) { - Log.d(LOG_TAG, "--- onTouchEvent"); - } - mManager.onCursorMoved(); - } - return superResult; - } - - /** - * Start editing. This function have to be called before other editing - * actions. - */ - public void onStartEdit() { - mManager.onStartEdit(); - } - - /** - * End editing. - */ - public void onEndEdit() { - mManager.onEndEdit(); - } - - /** - * Start "Copy" action. - */ - public void onStartCopy() { - mManager.onStartCopy(); - } - - /** - * Start "Cut" action. - */ - public void onStartCut() { - mManager.onStartCut(); - } - - /** - * Start "Paste" action. - */ - public void onStartPaste() { - mManager.onStartPaste(); - } - - /** - * Start changing "Size" action. - */ - public void onStartSize() { - mManager.onStartSize(); - } - - /** - * Start changing "Color" action. - */ - public void onStartColor() { - mManager.onStartColor(); - } - - /** - * Start changing "BackgroundColor" action. - */ - public void onStartBackgroundColor() { - mManager.onStartBackgroundColor(); - } - - /** - * Start changing "Alignment" action. - */ - public void onStartAlign() { - mManager.onStartAlign(); - } - - /** - * Start "Select" action. - */ - public void onStartSelect() { - mManager.onStartSelect(); - } - - /** - * Start "SelectAll" action. - */ - public void onStartSelectAll() { - mManager.onStartSelectAll(); - } - - /** - * Fix Selected Item. - */ - public void onFixSelectedItem() { - mManager.onFixSelectedItem(); - } - - /** - * 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.onInsertHorizontalLine(); - } - - public void onClearStyles() { - mManager.onClearStyles(); - } - /** - * Set Size of the Item. - * - * @param size - * The size of the Item. - */ - public void setItemSize(int size) { - mManager.setItemSize(size); - } - - /** - * Set Color of the Item. - * - * @param color - * The color of the Item. - */ - public void setItemColor(int color) { - mManager.setItemColor(color); - } - - /** - * Set Alignment of the Item. - * - * @param color - * 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) { - super.setBackgroundColor(color); - mBackgroundColor = color; - } - - /** - * Set html to EditStyledText. - * - * @param html - * The html to be set. - */ - public void setHtml(String html) { - mConverter.SetHtml(html); - } - /** - * 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(); - } - - @Override - public Bundle getInputExtras(boolean create) { - if (DBG) { - Log.d(LOG_TAG, "---getInputExtras"); - } - Bundle bundle = super.getInputExtras(create); - if (bundle != null) { - bundle = new Bundle(); - } - bundle.putBoolean("allowEmoji", true); - return bundle; - } - - /** - * Get the state of the selection. - * - * @return The state of the selection. - */ - public String getHtml() { - return mConverter.getHtml(); - } - - /** - * 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) { - mConverter.getUriArray(uris, getText()); - return mConverter.getHtml(); - } - - /** - * Get Background color of View. - * - * @return The background color of View. - */ - public int getBackgroundColor() { - return mBackgroundColor; - } - - /** - * Get Foreground color of View. - * - * @return The background color of View. - */ - public int getForeGroundColor(int pos) { - if (DBG) { - Log.d(LOG_TAG, "---getForeGroundColor: " + pos); - } - if (pos < 0 || pos > getText().length()) { - Log.e(LOG_TAG, "---getForeGroundColor: Illigal position."); - return DEFAULT_BACKGROUND_COLOR; - } else { - ForegroundColorSpan[] spans = - getText().getSpans(pos, pos, ForegroundColorSpan.class); - if (spans.length > 0) { - return spans[0].getForegroundColor(); - } else { - return DEFAULT_BACKGROUND_COLOR; - } - } - } - - /** - * Initialize members. - */ - private void init() { - if (DBG) { - Log.d(LOG_TAG, "--- init"); - } - requestFocus(); - mDefaultBackground = getBackground(); - mBackgroundColor = DEFAULT_BACKGROUND_COLOR; - mManager = new EditorManager(this); - mConverter = new StyledTextConverter(this); - mDialog = new StyledTextDialog(this); - setMovementMethod(new StyledTextArrowKeyMethod(mManager)); - mManager.blockSoftKey(); - mManager.unblockSoftKey(); - } - - /** - * Show Foreground Color Selecting Dialog. - */ - private void onShowForegroundColorAlert() { - mDialog.onShowForegroundColorAlertDialog(); - } - - /** - * Show Background Color Selecting Dialog. - */ - private void onShowBackgroundColorAlert() { - mDialog.onShowBackgroundColorAlertDialog(); - } - - /** - * Show Size Selecting Dialog. - */ - private void onShowSizeAlert() { - mDialog.onShowSizeAlertDialog(); - } - - /** - * Show Alignment Selecting Dialog. - */ - private void onShowAlignAlert() { - mDialog.onShowAlignAlertDialog(); - } - - /** - * Notify hint messages what action is expected to calling class. - * - * @param msgId - * Id of the hint message. - */ - private void setHintMessage(int msgId) { - if (mESTInterface != null) { - mESTInterface.notifyHintMsg(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 (mESTInterface != null) { - mESTInterface.notifyStateChanged(mode, state); - } - } - - /** - * EditorManager manages the flow and status of editing actions. - */ - private class EditorManager { - private boolean mEditFlag = false; - private boolean mSoftKeyBlockFlag = false; - private int mMode = 0; - private int mState = 0; - private int mCurStart = 0; - private int mCurEnd = 0; - private EditStyledText mEST; - - EditorManager(EditStyledText est) { - mEST = est; - } - - public void onStartEdit() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartEdit"); - } - Log.d(LOG_TAG, "--- onstartedit:"); - handleResetEdit(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onEndEdit() { - if (DBG) { - Log.d(LOG_TAG, "--- onEndEdit"); - } - handleCancel(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartCopy() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartCopy"); - } - handleCopy(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartCut() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartCut"); - } - handleCut(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartPaste() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartPaste"); - } - handlePaste(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartSize() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartSize"); - } - handleSize(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartAlign() { - if (DBG) { - Log.d(LOG_TAG, "--- onStartAlignRight"); - } - handleAlign(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartColor() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickColor"); - } - handleColor(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartBackgroundColor() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickColor"); - } - mEST.onShowBackgroundColorAlert(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onStartSelect() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickSelect"); - } - mMode = MODE_SELECT; - if (mState == STATE_SELECT_OFF) { - handleSelect(); - } else { - unsetSelect(); - handleSelect(); - } - mEST.notifyStateChanged(mMode, mState); - } - - public void onCursorMoved() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickView"); - } - if (mState == STATE_SELECT_ON || mState == STATE_SELECTED) { - handleSelect(); - mEST.notifyStateChanged(mMode, mState); - } - } - - public void onStartSelectAll() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickSelectAll"); - } - handleSelectAll(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onFixSelectedItem() { - if (DBG) { - Log.d(LOG_TAG, "--- onClickComplete"); - } - handleComplete(); - mEST.notifyStateChanged(mMode, mState); - } - - public void onInsertImage(Uri uri) { - if (DBG) { - Log.d(LOG_TAG, "--- onInsertImage by URI: " + uri.getPath() - + "," + uri.toString()); - } - insertImageSpan(new ImageSpan(mEST.getContext(), uri)); - mEST.notifyStateChanged(mMode, mState); - } - - public void onInsertImage(int resID) { - if (DBG) { - Log.d(LOG_TAG, "--- onInsertImage by resID"); - } - insertImageSpan(new ImageSpan(mEST.getContext(), resID)); - mEST.notifyStateChanged(mMode, mState); - } - - public void onInsertHorizontalLine() { - if (DBG) { - Log.d(LOG_TAG, "--- onInsertHorizontalLine:"); - } - insertImageSpan(new HorizontalLineSpan(0xFF000000, mEST)); - mEST.notifyStateChanged(mMode, mState); - } - - public void onClearStyles() { - if (DBG) { - Log.d(LOG_TAG, "--- onClearStyles"); - } - Editable txt = mEST.getText(); - int len = txt.length(); - Object[] styles = txt.getSpans(0, len, Object.class); - for (Object style : styles) { - if (style instanceof ParagraphStyle || - style instanceof QuoteSpan || - style instanceof CharacterStyle) { - if (style instanceof ImageSpan) { - int start = txt.getSpanStart(style); - int end = txt.getSpanEnd(style); - txt.replace(start, end, ""); - } - txt.removeSpan(style); - } - } - mEST.setBackgroundDrawable(mEST.mDefaultBackground); - mEST.mBackgroundColor = DEFAULT_BACKGROUND_COLOR; - } - - public void setItemSize(int size) { - if (DBG) { - Log.d(LOG_TAG, "--- onClickSizeItem"); - } - if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { - changeSizeSelectedText(size); - handleResetEdit(); - } - } - - public void setItemColor(int color) { - if (DBG) { - Log.d(LOG_TAG, "--- onClickColorItem"); - } - if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { - changeColorSelectedText(color); - handleResetEdit(); - } - } - - public void setAlignment(Layout.Alignment align) { - if (DBG) { - Log.d(LOG_TAG, "--- onClickColorItem"); - } - if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { - changeAlign(align); - handleResetEdit(); - } - } - - 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 -1, ParagraphStyle.class).length > 0 || - txt.getSpans(0, len -1, QuoteSpan.class).length > 0 || - txt.getSpans(0, len -1, CharacterStyle.class).length > 0 || - mEST.mBackgroundColor != DEFAULT_BACKGROUND_COLOR) { - return true; - } - return false; - } - - public boolean isSoftKeyBlocked() { - return mSoftKeyBlockFlag; - } - - public int getEditMode() { - return mMode; - } - - public int getSelectState() { - return mState; - } - - public int getSelectionStart() { - return mCurStart; - } - - public int getSelectionEnd() { - return mCurEnd; - } - - private void doNextHandle() { - if (DBG) { - Log.d(LOG_TAG, "--- doNextHandle: " + mMode + "," + mState); - } - switch (mMode) { - case MODE_COPY: - handleCopy(); - break; - case MODE_CUT: - handleCut(); - break; - case MODE_PASTE: - handlePaste(); - break; - case MODE_SIZE: - handleSize(); - break; - case MODE_COLOR: - handleColor(); - break; - case MODE_ALIGN: - handleAlign(); - break; - default: - break; - } - } - - private void handleCancel() { - if (DBG) { - Log.d(LOG_TAG, "--- handleCancel"); - } - mMode = MODE_NOTHING; - mState = STATE_SELECT_OFF; - mEditFlag = false; - Log.d(LOG_TAG, "--- handleCancel:" + mEST.getInputType()); - unblockSoftKey(); - unsetSelect(); - } - - private void handleComplete() { - if (DBG) { - Log.d(LOG_TAG, "--- handleComplete"); - } - if (!mEditFlag) { - return; - } - if (mState == STATE_SELECTED) { - mState = STATE_SELECT_FIX; - } - doNextHandle(); - } - - private void handleTextViewFunc(int mode, int id) { - if (DBG) { - Log.d(LOG_TAG, "--- handleTextView: " + mMode + "," + mState + - "," + id); - } - if (!mEditFlag) { - return; - } - if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { - mMode = mode; - if (mState == STATE_SELECTED) { - mState = STATE_SELECT_FIX; - handleTextViewFunc(mode, id); - } else { - handleSelect(); - } - } else if (mMode != mode) { - handleCancel(); - mMode = mode; - handleTextViewFunc(mode, id); - } else if (mState == STATE_SELECT_FIX) { - mEST.onTextContextMenuItem(id); - handleResetEdit(); - } - } - - private void handleCopy() { - if (DBG) { - Log.d(LOG_TAG, "--- handleCopy: " + mMode + "," + mState); - } - handleTextViewFunc(MODE_COPY, android.R.id.copy); - } - - private void handleCut() { - if (DBG) { - Log.d(LOG_TAG, "--- handleCopy: " + mMode + "," + mState); - } - handleTextViewFunc(MODE_CUT, android.R.id.cut); - } - - private void handlePaste() { - if (DBG) { - Log.d(LOG_TAG, "--- handlePaste"); - } - if (!mEditFlag) { - return; - } - mEST.onTextContextMenuItem(android.R.id.paste); - } - - private void handleSetSpan(int mode) { - if (DBG) { - Log.d(LOG_TAG, "--- handleSetSpan:" + mEditFlag + "," - + mState + ',' + mMode); - } - if (!mEditFlag) { - Log.e(LOG_TAG, "--- handleSetSpan: Editing is not started."); - return; - } - if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { - mMode = mode; - if (mState == STATE_SELECTED) { - mState = STATE_SELECT_FIX; - handleSetSpan(mode); - } else { - handleSelect(); - } - } else if (mMode != mode) { - handleCancel(); - mMode = mode; - handleSetSpan(mode); - } else { - if (mState == STATE_SELECT_FIX) { - mEST.setHintMessage(HINT_MSG_NULL); - switch (mode) { - case MODE_COLOR: - mEST.onShowForegroundColorAlert(); - break; - case MODE_SIZE: - mEST.onShowSizeAlert(); - break; - case MODE_ALIGN: - mEST.onShowAlignAlert(); - break; - default: - Log.e(LOG_TAG, "--- handleSetSpan: invalid mode."); - break; - } - } else { - Log.d(LOG_TAG, "--- handleSetSpan: do nothing."); - } - } - } - - private void handleSize() { - handleSetSpan(MODE_SIZE); - } - - private void handleColor() { - handleSetSpan(MODE_COLOR); - } - - private void handleAlign() { - handleSetSpan(MODE_ALIGN); - } - - private void handleSelect() { - if (DBG) { - Log.d(LOG_TAG, "--- handleSelect:" + mEditFlag + "," + mState); - } - if (!mEditFlag) { - return; - } - if (mState == STATE_SELECT_OFF) { - if (isTextSelected()) { - Log.e(LOG_TAG, "Selection is off, but selected"); - } - setSelectStartPos(); - blockSoftKey(); - mEST.setHintMessage(HINT_MSG_SELECT_END); - } else if (mState == STATE_SELECT_ON) { - if (isTextSelected()) { - Log.e(LOG_TAG, "Selection now start, but selected"); - } - setSelectedEndPos(); - mEST.setHintMessage(HINT_MSG_PUSH_COMPETE); - doNextHandle(); - } else if (mState == STATE_SELECTED) { - if (!isTextSelected()) { - Log.e(LOG_TAG, "Selection is done, but not selected"); - } - setSelectedEndPos(); - doNextHandle(); - } - } - - private void handleSelectAll() { - if (DBG) { - Log.d(LOG_TAG, "--- handleSelectAll"); - } - if (!mEditFlag) { - return; - } - mEST.selectAll(); - mState = STATE_SELECTED; - } - - private void handleResetEdit() { - if (DBG) { - Log.d(LOG_TAG, "Reset Editor"); - } - blockSoftKey(); - handleCancel(); - mEditFlag = true; - mEST.setHintMessage(HINT_MSG_SELECT_START); - } - - 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); - } else { - mEST.setSelection(mCurEnd, mCurStart); - } - mState = STATE_SELECTED; - } 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"); - } - 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 setSelectedEndPos() { - if (DBG) { - Log.d(LOG_TAG, "--- setSelectEndPos:"); - } - if (mEST.getSelectionStart() == mCurStart) { - setSelectedEndPos(mEST.getSelectionEnd()); - } else { - setSelectedEndPos(mEST.getSelectionStart()); - } - } - - public void setSelectedEndPos(int pos) { - if (DBG) { - Log.d(LOG_TAG, "--- setSelectedEndPos:"); - } - mCurEnd = pos; - setSelection(); - } - - private boolean isTextSelected() { - if (DBG) { - Log.d(LOG_TAG, "--- isTextSelected:" + mCurStart + "," - + mCurEnd); - } - return (mCurStart != mCurEnd) - && (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); - } - if (start < end) { - mEST.getText().setSpan(span, start, end, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } else { - mEST.getText().setSpan(span, end, start, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } - } - - private void changeSizeSelectedText(int size) { - if (DBG) { - Log.d(LOG_TAG, "--- changeSize:" + size); - } - setStyledTextSpan(new AbsoluteSizeSpan(size), - mCurStart, mCurEnd); - } - - private void changeColorSelectedText(int color) { - if (DBG) { - Log.d(LOG_TAG, "--- changeColor:" + color); - } - setStyledTextSpan(new ForegroundColorSpan(color), - mCurStart, mCurEnd); - } - - private void changeAlign(Layout.Alignment align) { - if (DBG) { - Log.d(LOG_TAG, "--- changeAlign:" + align); - } - setStyledTextSpan(new AlignmentSpan.Standard(align), - findLineStart(mEST.getText(), mCurStart), - findLineEnd(mEST.getText(), mCurEnd)); - } - - private int findLineStart(Editable text, int current) { - if (DBG) { - Log.d(LOG_TAG, "--- findLineStart: curr:" + current + - ", length:" + text.length()); - } - int pos = current; - for (; pos > 0; pos--) { - if (text.charAt(pos - 1) == '\n') { - break; - } - } - return pos; - } - - private void insertImageSpan(ImageSpan span) { - if (DBG) { - Log.d(LOG_TAG, "--- insertImageSpan"); - } - if (span != null) { - Log.d(LOG_TAG, "--- insertimagespan:" + span.getDrawable().getIntrinsicHeight() + "," + span.getDrawable().getIntrinsicWidth()); - Log.d(LOG_TAG, "--- insertimagespan:" + span.getDrawable().getClass()); - int curpos = mEST.getSelectionStart(); - mEST.getText().insert(curpos, "\uFFFC"); - 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"); - } - } - - private int findLineEnd(Editable text, int current) { - if (DBG) { - Log.d(LOG_TAG, "--- findLineEnd: curr:" + current + - ", length:" + text.length()); - } - int pos = current; - for (; pos < text.length(); pos++) { - if (pos > 0 && text.charAt(pos - 1) == '\n') { - break; - } - } - return pos; - } - - private void blockSoftKey() { - if (DBG) { - Log.d(LOG_TAG, "--- blockSoftKey:"); - } - InputMethodManager imm = (InputMethodManager) mEST.getContext(). - getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(mEST.getWindowToken(), 0); - mEST.setOnClickListener( - new OnClickListener() { - public void onClick(View v) { - Log.d(LOG_TAG, "--- ontrackballclick:"); - onFixSelectedItem(); - } - }); - mSoftKeyBlockFlag = true; - } - - private void unblockSoftKey() { - if (DBG) { - Log.d(LOG_TAG, "--- unblockSoftKey:"); - } - mEST.setOnClickListener(null); - mSoftKeyBlockFlag = false; - } - } - - private class StyledTextConverter { - private EditStyledText mEST; - - public StyledTextConverter(EditStyledText est) { - mEST = est; - } - - public String getHtml() { - String htmlBody = Html.toHtml(mEST.getText()); - if (DBG) { - Log.d(LOG_TAG, "--- getConvertedBody:" + htmlBody); - } - return htmlBody; - } - - public void getUriArray(ArrayList<Uri> uris, Editable text) { - uris.clear(); - if (DBG) { - Log.d(LOG_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(LOG_TAG, "--- getUriArray: foundArray" + - ((ImageSpan) images[j]).getSource()); - } - uris.add(Uri.parse( - ((ImageSpan) images[j]).getSource())); - } - } - } - - public void SetHtml (String html) { - final Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() { - public Drawable getDrawable(String src) { - Log.d(LOG_TAG, "--- sethtml: src="+src); - if (src.startsWith("content://")) { - Uri uri = Uri.parse(src); - try { - InputStream is = mEST.getContext().getContentResolver().openInputStream(uri); - Bitmap bitmap = BitmapFactory.decodeStream(is); - Drawable drawable = new BitmapDrawable( - getContext().getResources(), bitmap); - drawable.setBounds(0, 0, - drawable.getIntrinsicWidth(), - drawable.getIntrinsicHeight()); - is.close(); - return drawable; - } catch (Exception e) { - Log.e(LOG_TAG, "--- set html: Failed to loaded content " + uri, e); - return null; - } - } - Log.d(LOG_TAG, " unknown src="+src); - return null; - } - }, null); - mEST.setText(spanned); - } - } - - private class StyledTextDialog { - Builder mBuilder; - CharSequence mColorTitle; - CharSequence mSizeTitle; - CharSequence mAlignTitle; - CharSequence[] mColorNames; - CharSequence[] mColorInts; - CharSequence[] mSizeNames; - CharSequence[] mSizeDisplayInts; - CharSequence[] mSizeSendInts; - CharSequence[] mAlignNames; - EditStyledText mEST; - - public StyledTextDialog(EditStyledText est) { - mEST = est; - } - - public void setBuilder(Builder builder) { - mBuilder = builder; - } - - public void setColorAlertParams(CharSequence colortitle, - CharSequence[] colornames, CharSequence[] colorints) { - mColorTitle = colortitle; - mColorNames = colornames; - mColorInts = colorints; - } - - 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; - } - - private boolean checkColorAlertParams() { - if (DBG) { - Log.d(LOG_TAG, "--- checkParams"); - } - if (mBuilder == null) { - Log.e(LOG_TAG, "--- builder is null."); - return false; - } else if (mColorTitle == null || mColorNames == null - || mColorInts == null) { - Log.e(LOG_TAG, "--- color alert params are null."); - return false; - } else if (mColorNames.length != mColorInts.length) { - Log.e(LOG_TAG, "--- the length of color alert params are " - + "different."); - return false; - } - return true; - } - - private boolean checkSizeAlertParams() { - if (DBG) { - Log.d(LOG_TAG, "--- checkParams"); - } - if (mBuilder == null) { - Log.e(LOG_TAG, "--- builder is null."); - return false; - } else if (mSizeTitle == null || mSizeNames == null - || mSizeDisplayInts == null || mSizeSendInts == null) { - Log.e(LOG_TAG, "--- size alert params are null."); - return false; - } else if (mSizeNames.length != mSizeDisplayInts.length - && mSizeSendInts.length != mSizeDisplayInts.length) { - Log.e(LOG_TAG, "--- the length of size alert params are " - + "different."); - return false; - } - return true; - } - - private boolean checkAlignAlertParams() { - if (DBG) { - Log.d(LOG_TAG, "--- checkAlignAlertParams"); - } - if (mBuilder == null) { - Log.e(LOG_TAG, "--- builder is null."); - return false; - } else if (mAlignTitle == null) { - Log.e(LOG_TAG, "--- align alert params are null."); - return false; - } - return true; - } - - private void onShowForegroundColorAlertDialog() { - if (DBG) { - Log.d(LOG_TAG, "--- onShowForegroundColorAlertDialog"); - } - if (!checkColorAlertParams()) { - return; - } - mBuilder.setTitle(mColorTitle); - mBuilder.setIcon(0); - mBuilder. - setItems(mColorNames, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - Log.d("EETVM", "mBuilder.onclick:" + which); - int color = Integer.parseInt( - (String) mColorInts[which], 16) - 0x01000000; - mEST.setItemColor(color); - } - }); - mBuilder.show(); - } - - private void onShowBackgroundColorAlertDialog() { - if (DBG) { - Log.d(LOG_TAG, "--- onShowBackgroundColorAlertDialog"); - } - if (!checkColorAlertParams()) { - return; - } - mBuilder.setTitle(mColorTitle); - mBuilder.setIcon(0); - mBuilder. - setItems(mColorNames, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - Log.d("EETVM", "mBuilder.onclick:" + which); - int color = Integer.parseInt( - (String) mColorInts[which], 16) - 0x01000000; - mEST.setBackgroundColor(color); - } - }); - mBuilder.show(); - } - - private void onShowSizeAlertDialog() { - if (DBG) { - Log.d(LOG_TAG, "--- onShowSizeAlertDialog"); - } - if (!checkSizeAlertParams()) { - return; - } - mBuilder.setTitle(mSizeTitle); - mBuilder.setIcon(0); - mBuilder. - setItems(mSizeNames, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - Log.d(LOG_TAG, "mBuilder.onclick:" + which); - int size = Integer - .parseInt((String) mSizeDisplayInts[which]); - mEST.setItemSize(size); - } - }); - mBuilder.show(); - } - - private void onShowAlignAlertDialog() { - if (DBG) { - Log.d(LOG_TAG, "--- onShowAlignAlertDialog"); - } - if (!checkAlignAlertParams()) { - return; - } - mBuilder.setTitle(mAlignTitle); - mBuilder.setIcon(0); - mBuilder. - setItems(mAlignNames, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - Log.d(LOG_TAG, "mBuilder.onclick:" + 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: - break; - } - mEST.setAlignment(align); - } - }); - mBuilder.show(); - } - } - - private class StyledTextArrowKeyMethod extends ArrowKeyMovementMethod { - EditorManager mManager; - StyledTextArrowKeyMethod(EditorManager manager) { - super(); - mManager = manager; - } - - @Override - public boolean onKeyDown(TextView widget, Spannable buffer, - int keyCode, KeyEvent event) { - if (!mManager.isSoftKeyBlocked()) { - return super.onKeyDown(widget, buffer, keyCode, event); - } - if (executeDown(widget, buffer, keyCode)) { - return true; - } - return false; - } - - private int getEndPos(TextView widget) { - int end; - if (widget.getSelectionStart() == mManager.getSelectionStart()) { - end = widget.getSelectionEnd(); - } else { - end = widget.getSelectionStart(); - } - return end; - } - - private 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.setSelectedEndPos(to); - mManager.onCursorMoved(); - return true; - } - return false; - } - - private 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.setSelectedEndPos(to); - mManager.onCursorMoved(); - return true; - } - return false; - } - - private boolean left(TextView widget, Spannable buffer) { - if (DBG) { - Log.d(LOG_TAG, "--- left:"); - } - Layout layout = widget.getLayout(); - int to = layout.getOffsetToLeftOf(getEndPos(widget)); - mManager.setSelectedEndPos(to); - mManager.onCursorMoved(); - return true; - } - - private boolean right(TextView widget, Spannable buffer) { - if (DBG) { - Log.d(LOG_TAG, "--- right:"); - } - Layout layout = widget.getLayout(); - int to = layout.getOffsetToRightOf(getEndPos(widget)); - mManager.setSelectedEndPos(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 class HorizontalLineSpan extends ImageSpan { - public HorizontalLineSpan(int color, View view) { - super(new HorizontalLineDrawable(color, view)); - } - } - public class HorizontalLineDrawable extends ShapeDrawable { - private View mView; - public HorizontalLineDrawable(int color, View view) { - super(new RectShape()); - mView = view; - renewColor(color); - renewBounds(view); - } - @Override - public void draw(Canvas canvas) { - if (DBG) { - Log.d(LOG_TAG, "--- draw:"); - } - renewColor(); - renewBounds(mView); - super.draw(canvas); - } - - private void renewBounds(View view) { - if (DBG) { - int width = mView.getBackground().getBounds().width(); - int height = mView.getBackground().getBounds().height(); - Log.d(LOG_TAG, "--- renewBounds:" + width + "," + height); - Log.d(LOG_TAG, "--- renewBounds:" + mView.getClass()); - } - int width = mView.getWidth(); - if (width > 20) { - width -= 20; - } - setBounds(0, 0, width, 2); - } - private void renewColor(int color) { - if (DBG) { - Log.d(LOG_TAG, "--- renewColor:" + color); - } - getPaint().setColor(color); - } - private void renewColor() { - if (DBG) { - Log.d(LOG_TAG, "--- renewColor:"); - } - if (mView instanceof View) { - ImageSpan parent = getParentSpan(); - Editable text = ((EditStyledText)mView).getText(); - int start = text.getSpanStart(parent); - ForegroundColorSpan[] spans = text.getSpans(start, start, ForegroundColorSpan.class); - if (spans.length > 0) { - renewColor(spans[spans.length - 1].getForegroundColor()); - } - } - } - private ImageSpan getParentSpan() { - if (DBG) { - Log.d(LOG_TAG, "--- getParentSpan:"); - } - if (mView instanceof EditStyledText) { - Editable text = ((EditStyledText)mView).getText(); - ImageSpan[] images = text.getSpans(0, text.length(), ImageSpan.class); - if (images.length > 0) { - for (ImageSpan image: images) { - if (image.getDrawable() == this) { - return image; - } - } - } - } - Log.e(LOG_TAG, "---renewBounds: Couldn't find"); - return null; - } - } -} |