14df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project/* 24df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 34df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * 44df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 54df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * you may not use this file except in compliance with the License. 64df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * You may obtain a copy of the License at 74df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * 84df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 94df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * 104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 114df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * See the License for the specific language governing permissions and 144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * limitations under the License. 154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectpackage com.android.internal.widget; 184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport java.io.InputStream; 206ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataokaimport java.util.ArrayList; 216ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka 22ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.app.AlertDialog.Builder; 234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.content.Context; 24ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.content.DialogInterface; 2505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.Bitmap; 2605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.BitmapFactory; 2705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.Canvas; 2805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.drawable.BitmapDrawable; 2905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.drawable.Drawable; 3005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.drawable.ShapeDrawable; 3105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.graphics.drawable.shapes.RectShape; 32ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.net.Uri; 33ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.os.Bundle; 344df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.text.Editable; 35ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.text.Html; 36ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.text.Layout; 374df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.text.Spannable; 3805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.text.Spanned; 39ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.text.method.ArrowKeyMovementMethod; 404df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.text.style.AbsoluteSizeSpan; 41ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.text.style.AlignmentSpan; 4205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.text.style.CharacterStyle; 434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.text.style.ForegroundColorSpan; 44ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport android.text.style.ImageSpan; 4505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.text.style.ParagraphStyle; 4605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataokaimport android.text.style.QuoteSpan; 474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.util.AttributeSet; 484df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.util.Log; 49ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.view.KeyEvent; 504df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.view.MotionEvent; 51ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.view.View; 52ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.view.inputmethod.InputMethodManager; 534df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectimport android.widget.EditText; 54ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataokaimport android.widget.TextView; 554df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 564df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project/** 57ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * EditStyledText extends EditText for managing the flow and status to edit 58ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * the styled text. This manages the states and flows of editing, supports 59ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * inserting image, import/export HTML. 604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Projectpublic class EditStyledText extends EditText { 624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private static final String LOG_TAG = "EditStyledText"; 6405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private static final boolean DBG = false; 654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * The modes of editing actions. 684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode that no editing action is done. */ 704df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_NOTHING = 0; 714df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode of copy. */ 724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_COPY = 1; 734df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode of paste. */ 744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_PASTE = 2; 754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode of changing size. */ 764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_SIZE = 3; 774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode of changing color. */ 784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_COLOR = 4; 794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The mode of selection. */ 804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int MODE_SELECT = 5; 81ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** The mode of changing alignment. */ 82ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public static final int MODE_ALIGN = 6; 83ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** The mode of changing cut. */ 84ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public static final int MODE_CUT = 7; 854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * The state of selection. 884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The state that selection isn't started. */ 904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int STATE_SELECT_OFF = 0; 914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The state that selection is started. */ 924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int STATE_SELECT_ON = 1; 934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** The state that selection is done, but not fixed. */ 944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int STATE_SELECTED = 2; 95ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** The state that selection is done and not fixed. */ 964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int STATE_SELECT_FIX = 3; 974df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * The help message strings. 1004df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 1014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int HINT_MSG_NULL = 0; 1024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int HINT_MSG_COPY_BUF_BLANK = 1; 1034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int HINT_MSG_SELECT_START = 2; 1044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int HINT_MSG_SELECT_END = 3; 1054df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public static final int HINT_MSG_PUSH_COMPETE = 4; 1064df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 10705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 10805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 10905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * The help message strings. 11005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 11105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public static final int DEFAULT_BACKGROUND_COLOR = 0x00FFFFFF; 11205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 1134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 114ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * EditStyledTextInterface provides functions for notifying messages to 115ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * calling class. 1164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 117ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public interface EditStyledTextNotifier { 118ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void notifyHintMsg(int msgId); 119ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void notifyStateChanged(int mode, int state); 1204df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 121ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 122ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private EditStyledTextNotifier mESTInterface; 1234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1244df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 125ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * EditStyledTextEditorManager manages the flow and status of each 126ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * function for editing styled text. 1274df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 128ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private EditorManager mManager; 129ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private StyledTextConverter mConverter; 13005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private StyledTextDialog mDialog; 13105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private Drawable mDefaultBackground; 13205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private int mBackgroundColor; 1334df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1344df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 135ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * EditStyledText extends EditText for managing flow of each editing 136ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * action. 137ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 1384df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public EditStyledText(Context context, AttributeSet attrs, int defStyle) { 1394df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project super(context, attrs, defStyle); 1404df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project init(); 1414df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public EditStyledText(Context context, AttributeSet attrs) { 1444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project super(context, attrs); 1454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project init(); 1464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1484df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public EditStyledText(Context context) { 1494df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project super(context); 1504df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project init(); 1514df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1524df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1534df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 154ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Set Notifier. 155ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 156ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setNotifier(EditStyledTextNotifier estInterface) { 157ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mESTInterface = estInterface; 158ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 159ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 160ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 161ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Set Builder for AlertDialog. 162ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 163ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param builder 164ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Builder for opening Alert Dialog. 165ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 166ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setBuilder(Builder builder) { 16705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.setBuilder(builder); 168ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 169ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 170ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 171ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Set Parameters for ColorAlertDialog. 172ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 173ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param colortitle 174ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Title for Alert Dialog. 175ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param colornames 176ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * List of name of selecting color. 177ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param colorints 178ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * List of int of color. 179ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 180ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setColorAlertParams(CharSequence colortitle, 181ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] colornames, CharSequence[] colorints) { 18205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.setColorAlertParams(colortitle, colornames, colorints); 183ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 184ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 185ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 186ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Set Parameters for SizeAlertDialog. 187ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 188ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param sizetitle 189ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Title for Alert Dialog. 190ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param sizenames 191ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * List of name of selecting size. 192ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param sizedisplayints 193ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * List of int of size displayed in TextView. 194ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param sizesendints 195ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * List of int of size exported to HTML. 1964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 197ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setSizeAlertParams(CharSequence sizetitle, 198ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] sizenames, CharSequence[] sizedisplayints, 199ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] sizesendints) { 20005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.setSizeAlertParams(sizetitle, sizenames, sizedisplayints, 201ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project sizesendints); 2024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 204ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setAlignAlertParams(CharSequence aligntitle, 205ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka CharSequence[] alignnames) { 20605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.setAlignAlertParams(aligntitle, alignnames); 207ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 208ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 2094df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project @Override 2104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 211ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mManager.isSoftKeyBlocked() && 212ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka event.getAction() == MotionEvent.ACTION_UP) { 213ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka cancelLongPress(); 214ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 2154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project final boolean superResult = super.onTouchEvent(event); 2164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (event.getAction() == MotionEvent.ACTION_UP) { 2174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 2184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- onTouchEvent"); 2194df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 220ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onCursorMoved(); 2214df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2224df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return superResult; 2234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2244df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2254df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 226ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Start editing. This function have to be called before other editing 227ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * actions. 2284df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2294df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartEdit() { 2304df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartEdit(); 2314df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2324df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2334df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 2344df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * End editing. 2354df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2364df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onEndEdit() { 2374df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onEndEdit(); 2384df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2394df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2404df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 2414df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start "Copy" action. 2424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartCopy() { 2444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartCopy(); 2454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 248ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Start "Cut" action. 249ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 250ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartCut() { 251ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onStartCut(); 252ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 253ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 254ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 2554df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start "Paste" action. 2564df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2574df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartPaste() { 2584df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartPaste(); 2594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 2624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start changing "Size" action. 2634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2644df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartSize() { 2654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartSize(); 2664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 2694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start changing "Color" action. 2704df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2714df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartColor() { 2724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartColor(); 2734df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 27605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Start changing "BackgroundColor" action. 27705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 27805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onStartBackgroundColor() { 27905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mManager.onStartBackgroundColor(); 28005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 28105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 28205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 283ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Start changing "Alignment" action. 284ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 285ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartAlign() { 286ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onStartAlign(); 287ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 288ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 289ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 2904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start "Select" action. 2914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartSelect() { 2934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartSelect(); 2944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 2954df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 2964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 2974df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Start "SelectAll" action. 2984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 2994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartSelectAll() { 3004df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.onStartSelectAll(); 3014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 3034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 304ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Fix Selected Item. 305ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 306ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onFixSelectedItem() { 307ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onFixSelectedItem(); 308ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 309ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 310ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 311ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * InsertImage to TextView by using URI 312ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 313ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param uri 314ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * URI of the iamge inserted to TextView. 315ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 316ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onInsertImage(Uri uri) { 317ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mManager.onInsertImage(uri); 318ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 319ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 320ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 321ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * InsertImage to TextView by using resource ID 322ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 323ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param resId 324ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Resource ID of the iamge inserted to TextView. 325ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 326ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onInsertImage(int resId) { 327ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mManager.onInsertImage(resId); 328ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 329ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 33005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onInsertHorizontalLine() { 33105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mManager.onInsertHorizontalLine(); 33205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 33305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 33405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onClearStyles() { 33505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mManager.onClearStyles(); 33605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 337ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 3384df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Set Size of the Item. 339ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 340ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param size 341ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * The size of the Item. 3424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 3434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void setItemSize(int size) { 3444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.setItemSize(size); 3454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 3474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 3484df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Set Color of the Item. 349ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 350ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param color 351ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * The color of the Item. 3524df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 3534df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void setItemColor(int color) { 3544df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mManager.setItemColor(color); 3554df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3564df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 35705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 35805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Set Alignment of the Item. 35905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 36005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @param color 36105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * The color of the Item. 36205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 363ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setAlignment(Layout.Alignment align) { 364ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.setAlignment(align); 365ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 366ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 3674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 36805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Set Background color of View. 36905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 37005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @param color 37105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * The background color of view. 37205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 37305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka @Override 37405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void setBackgroundColor(int color) { 37505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka super.setBackgroundColor(color); 37605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBackgroundColor = color; 37705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 37805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 37905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 38005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Set html to EditStyledText. 38105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 38205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @param html 38305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * The html to be set. 38405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 38505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void setHtml(String html) { 38605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mConverter.SetHtml(html); 38705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 38805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 3896ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * Check whether editing is started or not. 390ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 3914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * @return Whether editing is started or not. 3924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 3934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public boolean isEditting() { 3944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mManager.isEditting(); 3954df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 3976ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka /** 39805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Check whether styled text or not. 39905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 40005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @return Whether styled text or not. 40105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 40205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public boolean isStyledText() { 40305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return mManager.isStyledText(); 40405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 40505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 4066ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * Check whether SoftKey is Blocked or not. 4076ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * 4086ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * @return whether SoftKey is Blocked or not. 4096ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka */ 410ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public boolean isSoftKeyBlocked() { 411ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return mManager.isSoftKeyBlocked(); 412ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 413ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 4144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 4154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Get the mode of the action. 416ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 4174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * @return The mode of the action. 4184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 4194df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public int getEditMode() { 4204df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mManager.getEditMode(); 4214df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 4224df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 4234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 4244df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Get the state of the selection. 425ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 4264df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * @return The state of the selection. 4274df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 4284df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public int getSelectState() { 4294df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mManager.getSelectState(); 4304df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 4314df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 4326ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka @Override 4336ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka public Bundle getInputExtras(boolean create) { 43405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 43505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "---getInputExtras"); 43605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 4376ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka Bundle bundle = super.getInputExtras(create); 4386ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka if (bundle != null) { 43905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka bundle = new Bundle(); 4406ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 44105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka bundle.putBoolean("allowEmoji", true); 4426ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka return bundle; 4436ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 4446ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka 445ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 446ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Get the state of the selection. 447ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * 448ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * @return The state of the selection. 449ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 450ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public String getHtml() { 45105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return mConverter.getHtml(); 452ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 453ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 4544df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 4556ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * Get the state of the selection. 4566ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * 4576ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * @param uris 4586ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * The array of used uris. 4596ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka * @return The state of the selection. 4606ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka */ 4616ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka public String getHtml(ArrayList<Uri> uris) { 46205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mConverter.getUriArray(uris, getText()); 46305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return mConverter.getHtml(); 46405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 46505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 46605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 46705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Get Background color of View. 46805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 46905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @return The background color of View. 47005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 47105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public int getBackgroundColor() { 47205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return mBackgroundColor; 47305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 47405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 47505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 47605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Get Foreground color of View. 47705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * 47805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * @return The background color of View. 47905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 48005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public int getForeGroundColor(int pos) { 48105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 48205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "---getForeGroundColor: " + pos); 48305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 48405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (pos < 0 || pos > getText().length()) { 48505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.e(LOG_TAG, "---getForeGroundColor: Illigal position."); 48605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return DEFAULT_BACKGROUND_COLOR; 48705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } else { 48805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka ForegroundColorSpan[] spans = 48905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka getText().getSpans(pos, pos, ForegroundColorSpan.class); 49005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (spans.length > 0) { 49105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return spans[0].getForegroundColor(); 49205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } else { 49305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return DEFAULT_BACKGROUND_COLOR; 49405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 49505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 4966ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 4976ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka 4986ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka /** 4994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Initialize members. 5004df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 5014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void init() { 5024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 5034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- init"); 5044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 50505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka requestFocus(); 50605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDefaultBackground = getBackground(); 50705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBackgroundColor = DEFAULT_BACKGROUND_COLOR; 508ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mManager = new EditorManager(this); 509ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mConverter = new StyledTextConverter(this); 51005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog = new StyledTextDialog(this); 511ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setMovementMethod(new StyledTextArrowKeyMethod(mManager)); 51205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mManager.blockSoftKey(); 51305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mManager.unblockSoftKey(); 514ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 515ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 516ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 51705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Show Foreground Color Selecting Dialog. 518ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 51905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void onShowForegroundColorAlert() { 52005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.onShowForegroundColorAlertDialog(); 52105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 52205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 52305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /** 52405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka * Show Background Color Selecting Dialog. 52505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka */ 52605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void onShowBackgroundColorAlert() { 52705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.onShowBackgroundColorAlertDialog(); 528ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 529ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 530ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 531ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Show Size Selecting Dialog. 532ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 533ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void onShowSizeAlert() { 53405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.onShowSizeAlertDialog(); 535ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 536ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 537ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 538ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Show Alignment Selecting Dialog. 539ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 540ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void onShowAlignAlert() { 54105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mDialog.onShowAlignAlertDialog(); 5424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 5434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 5444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 5454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project * Notify hint messages what action is expected to calling class. 546ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * 547ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * @param msgId 548ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * Id of the hint message. 5494df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 550ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private void setHintMessage(int msgId) { 5514df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mESTInterface != null) { 552ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mESTInterface.notifyHintMsg(msgId); 553ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 554ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 555ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 556ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka /** 557ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Notify the event that the mode and state are changed. 558ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * 559ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * @param mode 560ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Mode of the editing action. 561ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * @param state 562ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * Mode of the selection state. 563ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka */ 564ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void notifyStateChanged(int mode, int state) { 565ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mESTInterface != null) { 566ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mESTInterface.notifyStateChanged(mode, state); 567ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 568ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 569ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 5704df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project /** 571ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka * EditorManager manages the flow and status of editing actions. 5724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project */ 573ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private class EditorManager { 5744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private boolean mEditFlag = false; 575ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean mSoftKeyBlockFlag = false; 5764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private int mMode = 0; 5774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private int mState = 0; 5784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private int mCurStart = 0; 5794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private int mCurEnd = 0; 5804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private EditStyledText mEST; 5814df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 582ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project EditorManager(EditStyledText est) { 5834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST = est; 5844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 5854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 5864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartEdit() { 5874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 588ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartEdit"); 5894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 59005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onstartedit:"); 5914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleResetEdit(); 592ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 5934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 5944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 5954df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onEndEdit() { 5964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 597ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onEndEdit"); 5984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 5994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleCancel(); 600ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 6034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartCopy() { 6044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 605ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartCopy"); 6064df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6074df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleCopy(); 608ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6094df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 611ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartCut() { 6124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 613ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartCut"); 6144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 615ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleCut(); 616ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6174df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 619ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartPaste() { 6204df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 621ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartPaste"); 6224df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 623ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handlePaste(); 624ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6254df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6264df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 627ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartSize() { 6284df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 629ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartSize"); 6304df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 631ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSize(); 632ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6334df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6344df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 635ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartAlign() { 6364df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 637ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onStartAlignRight"); 6384df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 639ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleAlign(); 640ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6414df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 6434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartColor() { 6444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 6454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- onClickColor"); 6464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleColor(); 648ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6494df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6504df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 65105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onStartBackgroundColor() { 65205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 65305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onClickColor"); 65405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 65505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.onShowBackgroundColorAlert(); 65605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.notifyStateChanged(mMode, mState); 65705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 65805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 6594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public void onStartSelect() { 6604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 6614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- onClickSelect"); 6624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mMode = MODE_SELECT; 6644df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECT_OFF) { 6654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleSelect(); 6664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else { 667ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka unsetSelect(); 6684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleSelect(); 6694df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 670ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6714df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 673ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onCursorMoved() { 6744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 6754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- onClickView"); 6764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECT_ON || mState == STATE_SELECTED) { 6784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleSelect(); 679ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 680ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 681ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 682ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 683ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onStartSelectAll() { 684ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 685ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onClickSelectAll"); 6864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 687ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSelectAll(); 688ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 691ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onFixSelectedItem() { 6924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 6934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- onClickComplete"); 6944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6954df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleComplete(); 696ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 6974df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 6984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 699ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onInsertImage(Uri uri) { 700ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 701ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- onInsertImage by URI: " + uri.getPath() 702ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project + "," + uri.toString()); 703ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 70405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka insertImageSpan(new ImageSpan(mEST.getContext(), uri)); 705ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 706ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 707ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 708ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onInsertImage(int resID) { 709ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 710ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- onInsertImage by resID"); 711ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 71205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka insertImageSpan(new ImageSpan(mEST.getContext(), resID)); 71305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.notifyStateChanged(mMode, mState); 71405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 71505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 71605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onInsertHorizontalLine() { 71705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 71805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onInsertHorizontalLine:"); 71905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 72005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka insertImageSpan(new HorizontalLineSpan(0xFF000000, mEST)); 721ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.notifyStateChanged(mMode, mState); 722ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 723ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 72405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onClearStyles() { 72505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 72605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onClearStyles"); 72705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 72805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Editable txt = mEST.getText(); 72905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int len = txt.length(); 73005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Object[] styles = txt.getSpans(0, len, Object.class); 73105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka for (Object style : styles) { 73205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (style instanceof ParagraphStyle || 73305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka style instanceof QuoteSpan || 73405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka style instanceof CharacterStyle) { 73505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (style instanceof ImageSpan) { 73605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int start = txt.getSpanStart(style); 73705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int end = txt.getSpanEnd(style); 73805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka txt.replace(start, end, ""); 73905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 74005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka txt.removeSpan(style); 74105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 74205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 74305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.setBackgroundDrawable(mEST.mDefaultBackground); 74405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.mBackgroundColor = DEFAULT_BACKGROUND_COLOR; 74505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 74605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 747ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setItemSize(int size) { 748ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 749ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onClickSizeItem"); 750ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 751ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { 752ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka changeSizeSelectedText(size); 753ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleResetEdit(); 754ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 755ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 756ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 757ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setItemColor(int color) { 758ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 759ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onClickColorItem"); 760ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 761ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { 762ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka changeColorSelectedText(color); 763ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleResetEdit(); 764ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 765ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 766ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 767ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setAlignment(Layout.Alignment align) { 768ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 769ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- onClickColorItem"); 770ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 771ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mState == STATE_SELECTED || mState == STATE_SELECT_FIX) { 772ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka changeAlign(align); 773ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleResetEdit(); 774ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 775ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 776ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 7774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public boolean isEditting() { 7784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mEditFlag; 7794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 7804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 78105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka /* If the style of the span is added, add check case for that style */ 78205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public boolean isStyledText() { 78305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Editable txt = mEST.getText(); 78405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int len = txt.length(); 78505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (txt.getSpans(0, len -1, ParagraphStyle.class).length > 0 || 78605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka txt.getSpans(0, len -1, QuoteSpan.class).length > 0 || 78705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka txt.getSpans(0, len -1, CharacterStyle.class).length > 0 || 78805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.mBackgroundColor != DEFAULT_BACKGROUND_COLOR) { 78905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return true; 79005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 79105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return false; 79205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 79305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 794ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public boolean isSoftKeyBlocked() { 79505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return mSoftKeyBlockFlag; 796ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 797ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 7984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public int getEditMode() { 7994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mMode; 8004df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 8024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project public int getSelectState() { 8034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return mState; 8044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8054df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 806ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public int getSelectionStart() { 807ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return mCurStart; 808ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 809ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 810ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public int getSelectionEnd() { 811ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return mCurEnd; 812ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 813ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 814ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void doNextHandle() { 815ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 816ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- doNextHandle: " + mMode + "," + mState); 817ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 818ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka switch (mMode) { 819ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_COPY: 820ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleCopy(); 821ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 822ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_CUT: 823ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleCut(); 824ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 825ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_PASTE: 826ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handlePaste(); 827ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 828ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_SIZE: 829ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSize(); 830ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 831ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_COLOR: 832ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleColor(); 833ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 834ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_ALIGN: 835ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleAlign(); 836ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 837ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka default: 838ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 839ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 840ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 841ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 8424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void handleCancel() { 8434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 8444df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- handleCancel"); 8454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mMode = MODE_NOTHING; 8474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_OFF; 8484df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEditFlag = false; 849ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleCancel:" + mEST.getInputType()); 850ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka unblockSoftKey(); 851ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka unsetSelect(); 8524df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8534df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 8544df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void handleComplete() { 8554df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 8564df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- handleComplete"); 8574df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8584df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 8594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 8604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8614df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECTED) { 8624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_FIX; 8634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 864ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka doNextHandle(); 8654df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8664df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 867ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleTextViewFunc(int mode, int id) { 8684df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 869ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleTextView: " + mMode + "," + mState + 870ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka "," + id); 8714df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 8734df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 8744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { 876ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mMode = mode; 8774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECTED) { 8784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_FIX; 879ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleTextViewFunc(mode, id); 8804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else { 8814df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleSelect(); 8824df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 883ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else if (mMode != mode) { 8844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleCancel(); 885ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mMode = mode; 886ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleTextViewFunc(mode, id); 8874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else if (mState == STATE_SELECT_FIX) { 888ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.onTextContextMenuItem(id); 8894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleResetEdit(); 8904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 8924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 893ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleCopy() { 8944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 895ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleCopy: " + mMode + "," + mState); 8964df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 897ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleTextViewFunc(MODE_COPY, android.R.id.copy); 898ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 899ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 900ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleCut() { 901ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 902ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleCopy: " + mMode + "," + mState); 9034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 904ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleTextViewFunc(MODE_CUT, android.R.id.cut); 9054df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9064df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 907ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handlePaste() { 9084df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 909ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handlePaste"); 9104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9114df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 9124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 9134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 914ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.onTextContextMenuItem(android.R.id.paste); 9154df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9164df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 917ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleSetSpan(int mode) { 9184df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 919ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleSetSpan:" + mEditFlag + "," 920ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka + mState + ',' + mMode); 9214df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9224df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 923ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.e(LOG_TAG, "--- handleSetSpan: Editing is not started."); 9244df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 9254df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9264df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mMode == MODE_NOTHING || mMode == MODE_SELECT) { 927ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mMode = mode; 9284df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECTED) { 9294df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_FIX; 930ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSetSpan(mode); 9314df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else { 9324df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleSelect(); 9334df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 934ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else if (mMode != mode) { 9354df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleCancel(); 936ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mMode = mode; 937ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSetSpan(mode); 938ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else { 939ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (mState == STATE_SELECT_FIX) { 940ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mEST.setHintMessage(HINT_MSG_NULL); 941ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka switch (mode) { 942ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_COLOR: 94305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.onShowForegroundColorAlert(); 944ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 945ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_SIZE: 946ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.onShowSizeAlert(); 947ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 948ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case MODE_ALIGN: 949ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.onShowAlignAlert(); 950ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 951ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka default: 952ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.e(LOG_TAG, "--- handleSetSpan: invalid mode."); 953ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 954ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 955ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else { 956ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- handleSetSpan: do nothing."); 957ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 9584df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 961ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleSize() { 962ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSetSpan(MODE_SIZE); 963ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 964ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 965ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleColor() { 966ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSetSpan(MODE_COLOR); 967ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 968ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 969ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void handleAlign() { 970ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handleSetSpan(MODE_ALIGN); 971ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 972ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 9734df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void handleSelect() { 9744df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 975ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- handleSelect:" + mEditFlag + "," + mState); 9764df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 9784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 9794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mState == STATE_SELECT_OFF) { 9814df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (isTextSelected()) { 982ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "Selection is off, but selected"); 9834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 9844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project setSelectStartPos(); 985ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka blockSoftKey(); 9864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST.setHintMessage(HINT_MSG_SELECT_END); 9874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else if (mState == STATE_SELECT_ON) { 9884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (isTextSelected()) { 989ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "Selection now start, but selected"); 9904df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 991ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setSelectedEndPos(); 9924df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST.setHintMessage(HINT_MSG_PUSH_COMPETE); 9934df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project doNextHandle(); 9944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else if (mState == STATE_SELECTED) { 9954df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!isTextSelected()) { 996ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "Selection is done, but not selected"); 9974df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 998ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setSelectedEndPos(); 9994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project doNextHandle(); 10004df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10014df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 10034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void handleSelectAll() { 10044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 10054df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- handleSelectAll"); 10064df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10074df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (!mEditFlag) { 10084df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return; 10094df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST.selectAll(); 1011ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mState = STATE_SELECTED; 10124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 10144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void handleResetEdit() { 1015ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 1016ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "Reset Editor"); 1017ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 10186eb7298019c2e59877939474e7d77e8334192a98Satoshi Kataoka blockSoftKey(); 10194df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project handleCancel(); 10204df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEditFlag = true; 10214df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST.setHintMessage(HINT_MSG_SELECT_START); 10224df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10234df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1024ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void setSelection() { 10254df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 1026ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- onSelect:" + mCurStart + "," + mCurEnd); 10274df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10284df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (mCurStart >= 0 && mCurStart <= mEST.getText().length() 10294df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project && mCurEnd >= 0 && mCurEnd <= mEST.getText().length()) { 1030ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mCurStart < mCurEnd) { 1031ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.setSelection(mCurStart, mCurEnd); 1032ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else { 1033ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.setSelection(mCurEnd, mCurStart); 1034ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 10354df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECTED; 10364df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else { 10374df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.e(LOG_TAG, 10384df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project "Select is on, but cursor positions are illigal.:" 10394df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project + mEST.getText().length() + "," + mCurStart 10404df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project + "," + mCurEnd); 10414df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10424df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10434df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1044ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void unsetSelect() { 10454df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 10464df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- offSelect"); 10474df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10484df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project int currpos = mEST.getSelectionStart(); 10494df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mEST.setSelection(currpos, currpos); 10504df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_OFF; 10514df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10524df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 10534df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void setSelectStartPos() { 10544df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 10554df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- setSelectStartPos"); 10564df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10574df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mCurStart = mEST.getSelectionStart(); 10584df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState = STATE_SELECT_ON; 10594df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10604df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1061ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void setSelectedEndPos() { 10624df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 1063ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- setSelectEndPos:"); 10644df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1065ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mEST.getSelectionStart() == mCurStart) { 1066ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setSelectedEndPos(mEST.getSelectionEnd()); 10674df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else { 1068ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setSelectedEndPos(mEST.getSelectionStart()); 1069ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1070ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1071ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1072ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setSelectedEndPos(int pos) { 1073ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1074ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- setSelectedEndPos:"); 10754df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1076ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mCurEnd = pos; 1077ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setSelection(); 10784df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10794df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 10804df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private boolean isTextSelected() { 10814df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 10824df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project Log.d(LOG_TAG, "--- isTextSelected:" + mCurStart + "," 10834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project + mCurEnd); 10844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project return (mCurStart != mCurEnd) 10864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project && (mState == STATE_SELECTED || 10874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project mState == STATE_SELECT_FIX); 10884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 10894df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1090ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void setStyledTextSpan(Object span, int start, int end) { 10914df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 1092ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- setStyledTextSpan:" + mMode + "," 1093ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka + start + "," + end); 10944df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1095df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka if (start < end) { 1096df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka mEST.getText().setSpan(span, start, end, 1097df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 1098df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka } else { 1099df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka mEST.getText().setSpan(span, end, start, 1100df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 1101df6601ac91493a7368effbe198e0181627a2cd34Satoshi Kataoka } 11024df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 11034df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 11044df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void changeSizeSelectedText(int size) { 11054df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 110605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- changeSize:" + size); 11074df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1108ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setStyledTextSpan(new AbsoluteSizeSpan(size), 1109ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mCurStart, mCurEnd); 11104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 11114df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 11124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project private void changeColorSelectedText(int color) { 11134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (DBG) { 111405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- changeColor:" + color); 1115ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1116ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setStyledTextSpan(new ForegroundColorSpan(color), 1117ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mCurStart, mCurEnd); 1118ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1119ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1120ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void changeAlign(Layout.Alignment align) { 1121ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1122ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- changeAlign:" + align); 1123ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1124ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setStyledTextSpan(new AlignmentSpan.Standard(align), 1125ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka findLineStart(mEST.getText(), mCurStart), 1126ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka findLineEnd(mEST.getText(), mCurEnd)); 1127ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1128ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1129ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private int findLineStart(Editable text, int current) { 1130ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1131ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- findLineStart: curr:" + current + 1132ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka ", length:" + text.length()); 1133ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1134ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int pos = current; 1135ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka for (; pos > 0; pos--) { 11366eb7298019c2e59877939474e7d77e8334192a98Satoshi Kataoka if (text.charAt(pos - 1) == '\n') { 1137ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1138ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1139ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1140ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return pos; 1141ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1142ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 114305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void insertImageSpan(ImageSpan span) { 114405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 114505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- insertImageSpan"); 114605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 114705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (span != null) { 114805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- insertimagespan:" + span.getDrawable().getIntrinsicHeight() + "," + span.getDrawable().getIntrinsicWidth()); 114905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- insertimagespan:" + span.getDrawable().getClass()); 115005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int curpos = mEST.getSelectionStart(); 115105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.getText().insert(curpos, "\uFFFC"); 115205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.getText().setSpan(span, curpos, curpos + 1, 115305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 115405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.notifyStateChanged(mMode, mState); 115505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } else { 115605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.e(LOG_TAG, "--- insertImageSpan: null span was inserted"); 115705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 115805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 115905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 1160ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private int findLineEnd(Editable text, int current) { 1161ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1162ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- findLineEnd: curr:" + current + 1163ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka ", length:" + text.length()); 1164ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1165ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int pos = current; 1166ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka for (; pos < text.length(); pos++) { 11676eb7298019c2e59877939474e7d77e8334192a98Satoshi Kataoka if (pos > 0 && text.charAt(pos - 1) == '\n') { 1168ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1169ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1170ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1171ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return pos; 1172ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1173ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1174ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void blockSoftKey() { 1175ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1176ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- blockSoftKey:"); 11774df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 1178ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka InputMethodManager imm = (InputMethodManager) mEST.getContext(). 1179ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka getSystemService(Context.INPUT_METHOD_SERVICE); 1180ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka imm.hideSoftInputFromWindow(mEST.getWindowToken(), 0); 1181ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.setOnClickListener( 1182ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka new OnClickListener() { 1183ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onClick(View v) { 1184ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- ontrackballclick:"); 1185ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka onFixSelectedItem(); 1186ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1187ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka }); 1188ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mSoftKeyBlockFlag = true; 1189ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1190ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1191ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void unblockSoftKey() { 1192ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1193ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- unblockSoftKey:"); 1194ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1195ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.setOnClickListener(null); 119605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mSoftKeyBlockFlag = false; 11974df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 11984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 11994df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project 1200ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private class StyledTextConverter { 1201ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project private EditStyledText mEST; 1202ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 1203ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public StyledTextConverter(EditStyledText est) { 1204ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mEST = est; 1205ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1206ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 120705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public String getHtml() { 1208ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project String htmlBody = Html.toHtml(mEST.getText()); 1209ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1210ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- getConvertedBody:" + htmlBody); 1211ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1212ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return htmlBody; 1213ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 12146ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka 12156ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka public void getUriArray(ArrayList<Uri> uris, Editable text) { 12166ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka uris.clear(); 12176ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka if (DBG) { 12186ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka Log.d(LOG_TAG, "--- getUriArray:"); 12196ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 12206ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka int len = text.length(); 12216ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka int next; 12226ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka for (int i = 0; i < text.length(); i = next) { 12236ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka next = text.nextSpanTransition(i, len, ImageSpan.class); 12246ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka ImageSpan[] images = text.getSpans(i, next, ImageSpan.class); 12256ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka for (int j = 0; j < images.length; j++) { 12266ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka if (DBG) { 12276ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka Log.d(LOG_TAG, "--- getUriArray: foundArray" + 12286ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka ((ImageSpan) images[j]).getSource()); 12296ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 12306ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka uris.add(Uri.parse( 12315c70839ae3b06a03c82032a77fc44405cf1de2deSatoshi Kataoka ((ImageSpan) images[j]).getSource())); 12326ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 12336ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 12346ef7af508903eddc76f7bb693b71a547df94cb6eSatoshi Kataoka } 123505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 123605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void SetHtml (String html) { 123705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka final Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() { 123805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public Drawable getDrawable(String src) { 123905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- sethtml: src="+src); 124005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (src.startsWith("content://")) { 124105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Uri uri = Uri.parse(src); 124205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka try { 124305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka InputStream is = mEST.getContext().getContentResolver().openInputStream(uri); 124405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Bitmap bitmap = BitmapFactory.decodeStream(is); 124511ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn Drawable drawable = new BitmapDrawable( 124611ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn getContext().getResources(), bitmap); 124705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka drawable.setBounds(0, 0, 124805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka drawable.getIntrinsicWidth(), 124905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka drawable.getIntrinsicHeight()); 125005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka is.close(); 125105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return drawable; 125205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } catch (Exception e) { 125305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.e(LOG_TAG, "--- set html: Failed to loaded content " + uri, e); 125405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return null; 125505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 125605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 125705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, " unknown src="+src); 125805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return null; 125905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 126005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka }, null); 126105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.setText(spanned); 126205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 1263ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1264ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 126505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private class StyledTextDialog { 1266ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Builder mBuilder; 1267ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence mColorTitle; 1268ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence mSizeTitle; 1269ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka CharSequence mAlignTitle; 1270ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] mColorNames; 1271ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] mColorInts; 1272ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] mSizeNames; 1273ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] mSizeDisplayInts; 1274ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] mSizeSendInts; 1275ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka CharSequence[] mAlignNames; 1276ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project EditStyledText mEST; 1277ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 127805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public StyledTextDialog(EditStyledText est) { 1279ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mEST = est; 1280ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1281ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 1282ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setBuilder(Builder builder) { 1283ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder = builder; 1284ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1285ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 1286ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setColorAlertParams(CharSequence colortitle, 1287ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] colornames, CharSequence[] colorints) { 1288ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mColorTitle = colortitle; 1289ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mColorNames = colornames; 1290ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mColorInts = colorints; 1291ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1292ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 1293ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void setSizeAlertParams(CharSequence sizetitle, 1294ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] sizenames, CharSequence[] sizedisplayints, 1295ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project CharSequence[] sizesendints) { 1296ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mSizeTitle = sizetitle; 1297ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mSizeNames = sizenames; 1298ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mSizeDisplayInts = sizedisplayints; 1299ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mSizeSendInts = sizesendints; 1300ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1301ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 1302ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void setAlignAlertParams(CharSequence aligntitle, 1303ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka CharSequence[] alignnames) { 1304ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mAlignTitle = aligntitle; 1305ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mAlignNames = alignnames; 1306ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1307ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 130805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private boolean checkColorAlertParams() { 1309ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 1310ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- checkParams"); 1311ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1312ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (mBuilder == null) { 1313ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- builder is null."); 1314ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return false; 1315ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else if (mColorTitle == null || mColorNames == null 1316ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project || mColorInts == null) { 1317ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- color alert params are null."); 1318ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return false; 1319ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else if (mColorNames.length != mColorInts.length) { 1320ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- the length of color alert params are " 1321ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project + "different."); 1322ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return false; 1323ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1324ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return true; 1325ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1326ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 132705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private boolean checkSizeAlertParams() { 1328ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 1329ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d(LOG_TAG, "--- checkParams"); 1330ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1331ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (mBuilder == null) { 1332ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- builder is null."); 1333ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1334ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else if (mSizeTitle == null || mSizeNames == null 1335ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project || mSizeDisplayInts == null || mSizeSendInts == null) { 1336ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- size alert params are null."); 1337ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1338ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } else if (mSizeNames.length != mSizeDisplayInts.length 1339ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project && mSizeSendInts.length != mSizeDisplayInts.length) { 1340ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.e(LOG_TAG, "--- the length of size alert params are " 1341ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project + "different."); 1342ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1343ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1344ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1345ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1346ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 134705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private boolean checkAlignAlertParams() { 1348ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1349ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- checkAlignAlertParams"); 1350ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1351ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (mBuilder == null) { 1352ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.e(LOG_TAG, "--- builder is null."); 1353ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1354ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else if (mAlignTitle == null) { 1355ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.e(LOG_TAG, "--- align alert params are null."); 1356ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1357ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1358ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return true; 1359ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1360ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 136105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void onShowForegroundColorAlertDialog() { 1362ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 136305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onShowForegroundColorAlertDialog"); 1364ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1365ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!checkColorAlertParams()) { 1366ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return; 1367ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1368ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.setTitle(mColorTitle); 1369ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.setIcon(0); 1370ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder. 1371ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project setItems(mColorNames, 1372ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project new DialogInterface.OnClickListener() { 1373ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 1374ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Log.d("EETVM", "mBuilder.onclick:" + which); 1375ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project int color = Integer.parseInt( 1376ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project (String) mColorInts[which], 16) - 0x01000000; 1377ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mEST.setItemColor(color); 1378ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1379ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project }); 1380ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.show(); 1381ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1382ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 138305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void onShowBackgroundColorAlertDialog() { 1384ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (DBG) { 138505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onShowBackgroundColorAlertDialog"); 1386ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1387ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if (!checkColorAlertParams()) { 1388ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project return; 1389ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 139005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBuilder.setTitle(mColorTitle); 139105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBuilder.setIcon(0); 139205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBuilder. 139305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka setItems(mColorNames, 139405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka new DialogInterface.OnClickListener() { 139505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void onClick(DialogInterface dialog, int which) { 139605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d("EETVM", "mBuilder.onclick:" + which); 139705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int color = Integer.parseInt( 139805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka (String) mColorInts[which], 16) - 0x01000000; 139905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mEST.setBackgroundColor(color); 140005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 140105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka }); 140205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mBuilder.show(); 140305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 140405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 140505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void onShowSizeAlertDialog() { 140605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 140705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onShowSizeAlertDialog"); 140805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 140905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (!checkSizeAlertParams()) { 141005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return; 141105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 1412ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.setTitle(mSizeTitle); 1413ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.setIcon(0); 1414ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder. 1415ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project setItems(mSizeNames, 1416ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project new DialogInterface.OnClickListener() { 1417ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 1418ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "mBuilder.onclick:" + which); 1419ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project int size = Integer 1420ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project .parseInt((String) mSizeDisplayInts[which]); 1421ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mEST.setItemSize(size); 1422ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1423ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project }); 1424ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project mBuilder.show(); 1425ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 1426ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1427ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private void onShowAlignAlertDialog() { 1428ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 142905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- onShowAlignAlertDialog"); 1430ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1431ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (!checkAlignAlertParams()) { 1432ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return; 1433ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1434ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mBuilder.setTitle(mAlignTitle); 1435ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mBuilder.setIcon(0); 1436ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mBuilder. 1437ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka setItems(mAlignNames, 1438ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka new DialogInterface.OnClickListener() { 1439ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public void onClick(DialogInterface dialog, int which) { 1440ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "mBuilder.onclick:" + which); 1441ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Layout.Alignment align = Layout.Alignment.ALIGN_NORMAL; 1442ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka switch (which) { 1443ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case 0: 1444ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka align = Layout.Alignment.ALIGN_NORMAL; 1445ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1446ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case 1: 1447ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka align = Layout.Alignment.ALIGN_CENTER; 1448ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1449ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case 2: 1450ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka align = Layout.Alignment.ALIGN_OPPOSITE; 1451ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1452ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka default: 1453ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1454ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1455ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mEST.setAlignment(align); 1456ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1457ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka }); 1458ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mBuilder.show(); 1459ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1460ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1461ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1462ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private class StyledTextArrowKeyMethod extends ArrowKeyMovementMethod { 1463ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka EditorManager mManager; 1464ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka StyledTextArrowKeyMethod(EditorManager manager) { 1465ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka super(); 1466ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager = manager; 1467ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1468ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1469ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka @Override 1470ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka public boolean onKeyDown(TextView widget, Spannable buffer, 1471ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int keyCode, KeyEvent event) { 1472ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (!mManager.isSoftKeyBlocked()) { 1473ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return super.onKeyDown(widget, buffer, keyCode, event); 1474ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1475ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (executeDown(widget, buffer, keyCode)) { 1476ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1477ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1478ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1479ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1480ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1481ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private int getEndPos(TextView widget) { 1482ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int end; 1483ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (widget.getSelectionStart() == mManager.getSelectionStart()) { 1484ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka end = widget.getSelectionEnd(); 1485ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else { 1486ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka end = widget.getSelectionStart(); 1487ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1488ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return end; 1489ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1490ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1491ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean up(TextView widget, Spannable buffer) { 1492ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1493ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- up:"); 1494ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1495ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Layout layout = widget.getLayout(); 1496ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int end = getEndPos(widget); 1497ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int line = layout.getLineForOffset(end); 1498ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (line > 0) { 1499ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int to; 1500ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (layout.getParagraphDirection(line) == 1501ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka layout.getParagraphDirection(line - 1)) { 1502ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka float h = layout.getPrimaryHorizontal(end); 1503ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka to = layout.getOffsetForHorizontal(line - 1, h); 1504ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else { 1505ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka to = layout.getLineStart(line - 1); 1506ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1507ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.setSelectedEndPos(to); 1508ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onCursorMoved(); 1509ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1510ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1511ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1512ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1513ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1514ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean down(TextView widget, Spannable buffer) { 1515ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1516ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- down:"); 1517ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1518ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Layout layout = widget.getLayout(); 1519ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int end = getEndPos(widget); 1520ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int line = layout.getLineForOffset(end); 1521ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (line < layout.getLineCount() - 1) { 1522ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int to; 1523ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (layout.getParagraphDirection(line) == 1524ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka layout.getParagraphDirection(line + 1)) { 1525ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka float h = layout.getPrimaryHorizontal(end); 1526ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka to = layout.getOffsetForHorizontal(line + 1, h); 1527ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } else { 1528ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka to = layout.getLineStart(line + 1); 1529ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1530ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.setSelectedEndPos(to); 1531ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onCursorMoved(); 1532ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1533ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1534ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return false; 1535ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1536ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1537ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean left(TextView widget, Spannable buffer) { 1538ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1539ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- left:"); 1540ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1541ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Layout layout = widget.getLayout(); 1542ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int to = layout.getOffsetToLeftOf(getEndPos(widget)); 1543ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.setSelectedEndPos(to); 1544ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onCursorMoved(); 1545ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1546ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1547ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1548ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean right(TextView widget, Spannable buffer) { 1549ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1550ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- right:"); 1551ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1552ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Layout layout = widget.getLayout(); 1553ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int to = layout.getOffsetToRightOf(getEndPos(widget)); 1554ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.setSelectedEndPos(to); 1555ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onCursorMoved(); 1556ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return true; 1557ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1558ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1559ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka private boolean executeDown(TextView widget, Spannable buffer, 1560ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka int keyCode) { 1561ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka if (DBG) { 1562ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka Log.d(LOG_TAG, "--- executeDown: " + keyCode); 1563ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1564ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka boolean handled = false; 1565ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka 1566ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka switch (keyCode) { 1567ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case KeyEvent.KEYCODE_DPAD_UP: 1568ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handled |= up(widget, buffer); 1569ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1570ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case KeyEvent.KEYCODE_DPAD_DOWN: 1571ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handled |= down(widget, buffer); 1572ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1573ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case KeyEvent.KEYCODE_DPAD_LEFT: 1574ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handled |= left(widget, buffer); 1575ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1576ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case KeyEvent.KEYCODE_DPAD_RIGHT: 1577ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handled |= right(widget, buffer); 1578ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1579ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka case KeyEvent.KEYCODE_DPAD_CENTER: 1580ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka mManager.onFixSelectedItem(); 1581ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka handled = true; 1582ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka break; 1583ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1584ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka return handled; 1585ce8f3a8eca07291bf0f8f187b0d677204a897111Satoshi Kataoka } 1586ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project } 158705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 158805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public class HorizontalLineSpan extends ImageSpan { 158905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public HorizontalLineSpan(int color, View view) { 159005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka super(new HorizontalLineDrawable(color, view)); 159105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 159205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 159305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public class HorizontalLineDrawable extends ShapeDrawable { 159405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private View mView; 159505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public HorizontalLineDrawable(int color, View view) { 159605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka super(new RectShape()); 159705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka mView = view; 159805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka renewColor(color); 159905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka renewBounds(view); 160005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 160105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka @Override 160205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka public void draw(Canvas canvas) { 160305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 160405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- draw:"); 160505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 160605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka renewColor(); 160705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka renewBounds(mView); 160805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka super.draw(canvas); 160905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 161005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka 161105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void renewBounds(View view) { 161205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 161305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int width = mView.getBackground().getBounds().width(); 161405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int height = mView.getBackground().getBounds().height(); 161505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- renewBounds:" + width + "," + height); 161605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- renewBounds:" + mView.getClass()); 161705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 161805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int width = mView.getWidth(); 161905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (width > 20) { 162005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka width -= 20; 162105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 162205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka setBounds(0, 0, width, 2); 162305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 162405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void renewColor(int color) { 162505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 162605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- renewColor:" + color); 162705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 162805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka getPaint().setColor(color); 162905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 163005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private void renewColor() { 163105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 163205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- renewColor:"); 163305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 163405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (mView instanceof View) { 163505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka ImageSpan parent = getParentSpan(); 163605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Editable text = ((EditStyledText)mView).getText(); 163705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka int start = text.getSpanStart(parent); 163805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka ForegroundColorSpan[] spans = text.getSpans(start, start, ForegroundColorSpan.class); 163905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (spans.length > 0) { 164005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka renewColor(spans[spans.length - 1].getForegroundColor()); 164105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 164205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 164305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 164405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka private ImageSpan getParentSpan() { 164505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (DBG) { 164605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.d(LOG_TAG, "--- getParentSpan:"); 164705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 164805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (mView instanceof EditStyledText) { 164905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Editable text = ((EditStyledText)mView).getText(); 165005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka ImageSpan[] images = text.getSpans(0, text.length(), ImageSpan.class); 165105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (images.length > 0) { 165205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka for (ImageSpan image: images) { 165305a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka if (image.getDrawable() == this) { 165405a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return image; 165505a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 165605a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 165705a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 165805a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 165905a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka Log.e(LOG_TAG, "---renewBounds: Couldn't find"); 166005a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka return null; 166105a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 166205a3c6870cf718f0bdeea6f3b7c031299ecdd7faSatoshi Kataoka } 16634df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project} 1664