package com.termux.shared.models; import android.graphics.Color; import android.graphics.Typeface; import androidx.annotation.NonNull; import com.termux.shared.activities.TextIOActivity; import com.termux.shared.data.DataUtils; import java.io.Serializable; /** * An object that stored info for {@link TextIOActivity}. * Max text limit is 95KB to prevent TransactionTooLargeException as per * {@link DataUtils#TRANSACTION_SIZE_LIMIT_IN_BYTES}. Larger size can be supported for in-app * transactions by storing {@link TextIOInfo} as a serialized object in a file like * {@link com.termux.shared.activities.ReportActivity} does. */ public class TextIOInfo implements Serializable { public static final int GENERAL_DATA_SIZE_LIMIT_IN_BYTES = 1000; public static final int LABEL_SIZE_LIMIT_IN_BYTES = 4000; public static final int TEXT_SIZE_LIMIT_IN_BYTES = 100000 - GENERAL_DATA_SIZE_LIMIT_IN_BYTES - LABEL_SIZE_LIMIT_IN_BYTES; // < 100KB /** The action for which {@link TextIOActivity} will be started. */ private final String mAction; /** The internal app component that is will start the {@link TextIOActivity}. */ private final String mSender; /** The activity title. */ private String mTitle; /** If back button should be shown in {@link android.app.ActionBar}. */ private boolean mShowBackButtonInActionBar = false; /** If label is enabled. */ private boolean mLabelEnabled = false; /** * The label of text input set in {@link android.widget.TextView} that can be updated by user. * Max allowed length is {@link #LABEL_SIZE_LIMIT_IN_BYTES}. */ private String mLabel; /** The text size of label. Defaults to 14sp. */ private int mLabelSize = 14; /** The text color of label. Defaults to {@link Color#BLACK}. */ private int mLabelColor = Color.BLACK; /** The {@link Typeface} family of label. Defaults to "sans-serif". */ private String mLabelTypeFaceFamily = "sans-serif"; /** The {@link Typeface} style of label. Defaults to {@link Typeface#BOLD}. */ private int mLabelTypeFaceStyle = Typeface.BOLD; /** * The text of text input set in {@link android.widget.EditText} that can be updated by user. * Max allowed length is {@link #TEXT_SIZE_LIMIT_IN_BYTES}. */ private String mText; /** The text size for text. Defaults to 12sp. */ private int mTextSize = 12; /** The text size for text. Defaults to {@link #TEXT_SIZE_LIMIT_IN_BYTES}. */ private int mTextLengthLimit = TEXT_SIZE_LIMIT_IN_BYTES; /** The text color of text. Defaults to {@link Color#BLACK}. */ private int mTextColor = Color.BLACK; /** The {@link Typeface} family for text. Defaults to "sans-serif". */ private String mTextTypeFaceFamily = "sans-serif"; /** The {@link Typeface} style for text. Defaults to {@link Typeface#NORMAL}. */ private int mTextTypeFaceStyle = Typeface.NORMAL; /** If horizontal scrolling should be enabled for text. */ private boolean mTextHorizontallyScrolling = false; /** If character usage should be enabled for text. */ private boolean mShowTextCharacterUsage = false; /** If editing text should be disabled so that text acts like its in a {@link android.widget.TextView}. */ private boolean mEditingTextDisabled = false; public TextIOInfo(@NonNull String action, @NonNull String sender) { mAction = action; mSender = sender; } public String getAction() { return mAction; } public String getSender() { return mSender; } public String getTitle() { return mTitle; } public void setTitle(String title) { mTitle = title; } public boolean shouldShowBackButtonInActionBar() { return mShowBackButtonInActionBar; } public void setShowBackButtonInActionBar(boolean showBackButtonInActionBar) { mShowBackButtonInActionBar = showBackButtonInActionBar; } public boolean isLabelEnabled() { return mLabelEnabled; } public void setLabelEnabled(boolean labelEnabled) { mLabelEnabled = labelEnabled; } public String getLabel() { return mLabel; } public void setLabel(String label) { mLabel = DataUtils.getTruncatedCommandOutput(label, LABEL_SIZE_LIMIT_IN_BYTES, true, false, false); } public int getLabelSize() { return mLabelSize; } public void setLabelSize(int labelSize) { if (labelSize > 0) mLabelSize = labelSize; } public int getLabelColor() { return mLabelColor; } public void setLabelColor(int labelColor) { mLabelColor = labelColor; } public String getLabelTypeFaceFamily() { return mLabelTypeFaceFamily; } public void setLabelTypeFaceFamily(String labelTypeFaceFamily) { mLabelTypeFaceFamily = labelTypeFaceFamily; } public int getLabelTypeFaceStyle() { return mLabelTypeFaceStyle; } public void setLabelTypeFaceStyle(int labelTypeFaceStyle) { mLabelTypeFaceStyle = labelTypeFaceStyle; } public String getText() { return mText; } public void setText(String text) { mText = DataUtils.getTruncatedCommandOutput(text, TEXT_SIZE_LIMIT_IN_BYTES, true, false, false); } public int getTextSize() { return mTextSize; } public void setTextSize(int textSize) { if (textSize > 0) mTextSize = textSize; } public int getTextLengthLimit() { return mTextLengthLimit; } public void setTextLengthLimit(int textLengthLimit) { if (textLengthLimit < TEXT_SIZE_LIMIT_IN_BYTES) mTextLengthLimit = textLengthLimit; } public int getTextColor() { return mTextColor; } public void setTextColor(int textColor) { mTextColor = textColor; } public String getTextTypeFaceFamily() { return mTextTypeFaceFamily; } public void setTextTypeFaceFamily(String textTypeFaceFamily) { mTextTypeFaceFamily = textTypeFaceFamily; } public int getTextTypeFaceStyle() { return mTextTypeFaceStyle; } public void setTextTypeFaceStyle(int textTypeFaceStyle) { mTextTypeFaceStyle = textTypeFaceStyle; } public boolean isHorizontallyScrollable() { return mTextHorizontallyScrolling; } public void setTextHorizontallyScrolling(boolean textHorizontallyScrolling) { mTextHorizontallyScrolling = textHorizontallyScrolling; } public boolean shouldShowTextCharacterUsage() { return mShowTextCharacterUsage; } public void setShowTextCharacterUsage(boolean showTextCharacterUsage) { mShowTextCharacterUsage = showTextCharacterUsage; } public boolean isEditingTextDisabled() { return mEditingTextDisabled; } public void setEditingTextDisabled(boolean editingTextDisabled) { mEditingTextDisabled = editingTextDisabled; } }