1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.text.style;
import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.os.Parcel;
import android.text.ParcelableSpan;
import android.text.TextUtils;
import android.widget.TextView;
/**
* Provides an easy way to edit a portion of text.
* <p>
* The {@link TextView} uses this span to allow the user to delete a chuck of text in one click.
* <p>
* {@link TextView} removes the span when the user deletes the whole text or modifies it.
* <p>
* This span can be also used to receive notification when the user deletes or modifies the text;
*/
public class EasyEditSpan implements ParcelableSpan {
/**
* The extra key field in the pending intent that describes how the text changed.
*
* @see #TEXT_DELETED
* @see #TEXT_MODIFIED
*/
public static final String EXTRA_TEXT_CHANGED_TYPE =
"android.text.style.EXTRA_TEXT_CHANGED_TYPE";
/**
* The value of {@link #EXTRA_TEXT_CHANGED_TYPE} when the text wrapped by this span is deleted.
*/
public static final int TEXT_DELETED = 1;
/**
* The value of {@link #EXTRA_TEXT_CHANGED_TYPE} when the text wrapped by this span is modified.
*/
public static final int TEXT_MODIFIED = 2;
private final PendingIntent mPendingIntent;
private boolean mDeleteEnabled;
/**
* Creates the span. No intent is sent when the wrapped text is modified or
* deleted.
*/
public EasyEditSpan() {
mPendingIntent = null;
mDeleteEnabled = true;
}
/**
* @param pendingIntent The intent will be sent when the wrapped text is deleted or modified.
* When the pending intent is sent, {@link #EXTRA_TEXT_CHANGED_TYPE} is
* added in the intent to describe how the text changed.
*/
public EasyEditSpan(PendingIntent pendingIntent) {
mPendingIntent = pendingIntent;
mDeleteEnabled = true;
}
/**
* Constructor called from {@link TextUtils} to restore the span.
*/
public EasyEditSpan(@NonNull Parcel source) {
mPendingIntent = source.readParcelable(null);
mDeleteEnabled = (source.readByte() == 1);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
writeToParcelInternal(dest, flags);
}
/** @hide */
public void writeToParcelInternal(@NonNull Parcel dest, int flags) {
dest.writeParcelable(mPendingIntent, 0);
dest.writeByte((byte) (mDeleteEnabled ? 1 : 0));
}
@Override
public int getSpanTypeId() {
return getSpanTypeIdInternal();
}
/** @hide */
public int getSpanTypeIdInternal() {
return TextUtils.EASY_EDIT_SPAN;
}
/**
* @return True if the {@link TextView} should offer the ability to delete the text.
*
* @hide
*/
@UnsupportedAppUsage
public boolean isDeleteEnabled() {
return mDeleteEnabled;
}
/**
* Enables or disables the deletion of the text.
*
* @hide
*/
@UnsupportedAppUsage
public void setDeleteEnabled(boolean value) {
mDeleteEnabled = value;
}
/**
* @return the pending intent to send when the wrapped text is deleted or modified.
*
* @hide
*/
@UnsupportedAppUsage
public PendingIntent getPendingIntent() {
return mPendingIntent;
}
}
|