/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
package javax.microedition.lcdui;
import org.eclipse.ercp.swt.mobile.ConstrainedText;
import org.eclipse.ercp.swt.mobile.TextExtension;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.*;
/**
* Dynamic Text component implementation over the TextExtension/ConstrainedText
* widgets as a wrapper.
*/
class TextWrapper
{
private String text;
private String inputMode;
private int constraints;
private int caret;
private int size;
private int maxSize;
private Control control; // owned
private int style;
private int width = -1;
private int height = -1;
private int x = -1;
private int y = -1;
private Color fgCol; // owned
private Color bgCol; // owned
private boolean visible = true;
private boolean focused = true;
private Font font; // not owned
private ModifyListener modifyListener; // not owned
private SelectionListener selectionListener; // not owned
private String retSelectedStr;
private int retLineHeight;
private int retLineCount;
private int retTopPixel;
/**
* Constructor.
*
* @param aText
* @param aMaxSize
* @param aConstraints
*/
TextWrapper(String aText, int aMaxSize, int aConstraints)
{
setMaxSize(aMaxSize);
setConstraints(aConstraints);
setContent(aText);
}
/**
* Construct eSWT control on specified composite.
*
* @param parent composite to create on
* @param addStyle additional style
*/
void construct(final Composite parent, final int addStyle)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtConstruct(parent, addStyle);
}
});
}
/**
* Construct eSWT control on specified composite.
*
* @param parent composite to create on
* @param addStyle additional style
*/
void eswtConstruct(Composite parent, int addStyle)
{
style = addStyle | SWT.MULTI | SWT.WRAP;
if(parent != null)
{
eswtStoreStateAndDispose();
eswtRestoreStateAndCreate(parent);
}
else
{
Logger.warning("Trying to construct TextWrapper with null parent");
}
}
/**
* Delete subset of characters from content.
*
* @param offset
* @param length
*/
void delete(int offset, int length)
{
if((offset + length) > getSize())
{
throw new StringIndexOutOfBoundsException(
MsgRepository.TEXT_EXCEPTION_ARRAY_INDEX_OUT_OF_BOUNDS);
}
StringBuffer sb = new StringBuffer(getContent());
sb.delete(offset, offset + length);
setContent(sb.toString());
}
/**
* Dispose eSWT control.
*/
void dispose()
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtStoreStateAndDispose();
}
});
}
}
/**
* Get caret position.
*/
int getCaretPosition()
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
caret = eswtGetCaretPosition(control);
}
});
}
return caret;
}
/**
* Get constraints.
*/
int getConstraints()
{
return constraints;
}
/**
* Get text content.
*/
String getContent()
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
text = eswtGetContent(control);
}
});
}
return text;
}
/**
* Gets the height of this Text control in pixels.
*/
int getHeight()
{
return height;
}
/**
* Get input mode.
*/
String getInputMode()
{
return inputMode;
}
/**
* Get line count.
*/
int getLineCount()
{
retLineCount = 1;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
retLineCount = eswtGetLineCount(control);
}
});
}
return retLineCount;
}
/**
* Get line height (in pixels).
*/
int getLineHeight()
{
retLineHeight = 1;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
retLineHeight = eswtGetLineHeight(control);
}
});
}
return retLineHeight;
}
/**
* Get maximum size (in characters).
*/
int getMaxSize()
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
maxSize = eswtGetMaxSize(control);
}
});
}
return maxSize;
}
/**
* Get the preferred height (in pixels) of the text control.
*
* @param maxVisibleLines maximum visible lines
*/
int getPreferredHeight(int maxVisibleLines)
{
// lineCount (1 .. max) * lineHeight
return Math.min(Math.max(1, getLineCount()), maxVisibleLines)
* getLineHeight();
}
/**
* Get selected text content.
*/
String getSelectedContent()
{
retSelectedStr = "";
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
retSelectedStr = eswtGetSelectedContent(control);
}
});
}
return retSelectedStr;
}
/**
* Get content's length.
*/
int getSize()
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
size = eswtGetSize(control);
}
});
}
return size;
}
/**
* Get visible top pixel position relative to whole content.
*/
int getTopPixelPosition()
{
retTopPixel = 0;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
if(control instanceof TextExtension)
{
retTopPixel = ((TextExtension) control).getTopPixel();
}
// ConstrainedText does not scroll -> value is 0
}
});
}
return retTopPixel;
}
/**
* Gets the width of this Text control (in pixels).
*/
int getWidth()
{
return width;
}
/**
* Insert text content.
*
* @param aText text
* @param aPosition position where to instert
*/
void insert(String aText, int aPosition)
{
if(aText == null)
{
throw new NullPointerException(
MsgRepository.TEXT_EXCEPTION_TXT_IS_NULL);
}
StringBuffer sb = new StringBuffer(getContent());
if(aPosition < 0)
{
sb.insert(0, aText);
}
else if(aPosition > sb.length())
{
sb.append(aText);
}
else
{
sb.insert(aPosition, aText);
}
setContent(sb.toString());
}
/**
* Set background color.
*
* @param alpha alpha component (currently not used)
* @param red color component
* @param green color component
* @param blue color component
*/
void setBackgroundColor(final int alpha, final int red, final int green, final int blue)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
if(bgCol != null)
{
bgCol.dispose();
bgCol = null;
}
bgCol = new Color(ESWTUIThreadRunner.getInstance().getDisplay(),
red, green, blue);
}
});
}
/**
* Set the bounds of the Text control.
*
* @param aBounds bounding rectangle
*/
void setBounds(Rectangle aBounds)
{
if(aBounds.width < 0 || aBounds.height < 0)
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_INVALID_SIZE);
}
x = aBounds.x;
y = aBounds.y;
width = aBounds.width;
height = aBounds.height;
if(control != null && width >= 0 && height >= 0)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
control.setBounds(x, y, width, height);
}
});
}
}
/**
* Set caret position.
*
* @param aPosition position
*/
void setCaretposition(int aPosition)
{
caret = aPosition;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetSelection(control, caret, caret);
}
});
}
}
/**
* Set constraints. Note: this might reconstruct the eSWT text control.
*
* @param aConstraints text input constraints
*/
void setConstraints(int aConstraints)
{
if(!isValidConstraints(aConstraints))
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_INVALID_CONSTRAINTS);
}
constraints = aConstraints;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtRestoreStateAndCreate(eswtStoreStateAndDispose());
}
});
}
}
/**
* Set text content.
*
* @param aText new content
*/
void setContent(String aText)
{
if(aText == null)
{
text = "";
}
else
{
if(aText.length() > maxSize)
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_MAX_SIZE_EXCEEDED);
}
if(!isValidText(aText, constraints))
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_WRONG_TEXT);
}
text = aText;
}
size = text.length();
caret = text.length();
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetContent(control, text);
eswtSetSelection(control, caret, caret);
}
});
}
}
/**
* Set text font.
*
* @param aFont new font
*/
void setFont(Font aFont)
{
font = aFont;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
if(font != null)
{
// set custom font
control.setFont(Font.getESWTFont(font));
}
else
{
// set default font
control.setFont(
Font.getESWTFont(Font.getDefaultFont()));
}
}
});
}
}
/**
* Set this Text control focused.
*
* @param aFocused
*/
void setFocused(boolean aFocused)
{
focused = aFocused;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetFocused(control, focused);
}
});
}
}
/**
* Set foreground color.
*
* @param alpha alpha component (currently not used)
* @param red color component
* @param green color component
* @param blue color component
*/
void setForegroundColor(final int alpha, final int red, final int green, final int blue)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
if(fgCol != null)
{
fgCol.dispose();
fgCol = null;
}
fgCol = new Color(ESWTUIThreadRunner.getInstance().getDisplay(),
red, green, blue);
}
});
}
/**
* Set input mode.
*
* @param inputMode
*/
void setInputMode(String aInputMode)
{
inputMode = aInputMode;
if(control != null && control instanceof TextExtension)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetInputMode(control, inputMode, constraints);
}
});
}
}
/**
* Set maximum size (in characters).
*
* @param aMaxSize
*/
void setMaxSize(int aMaxSize)
{
if(aMaxSize < 1)
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_INVALID_MAX_SIZE);
}
String content = getContent();
if(content != null && aMaxSize < content.length())
{
// we have to truncate content - validates the new text
setContent(content.substring(0, aMaxSize));
}
maxSize = aMaxSize;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetMaxSize(control, maxSize);
}
});
}
}
/**
* Set the modify listener;
*
* @param aListener modify listener
*/
void setModifyListener(final ModifyListener aListener)
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtRemoveModListener(control, modifyListener);
eswtAddModListener(control, aListener);
}
});
}
modifyListener = aListener;
}
/**
* Set the selection listener.
*
* @param aListener selection listener
*/
void setSelectionListener(final SelectionListener aListener)
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtRemoveSelListener(control, selectionListener);
eswtAddSelListener(control, aListener);
}
});
}
selectionListener = aListener;
}
/**
* Set the location of the eSWT control.
*
* @param aX
* @param aY
*/
void setPosition(int aX, int aY)
{
x = aX;
y = aY;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
control.setLocation(x, y);
}
});
}
}
/**
* Set the selection in the eSWT text control.
*
* @param sta selection start
* @param end selection end
*/
void setSelection(final int sta, final int end)
{
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
eswtSetSelection(control, sta, end);
}
});
}
}
/**
* Set the size of the eSWT control.
*
* @param width
* @param height
*/
void setSize(int aWidth, int aHeight)
{
if(aWidth < 0 || aHeight < 0)
{
throw new IllegalArgumentException(
MsgRepository.TEXT_EXCEPTION_INVALID_SIZE);
}
width = aWidth;
height = aHeight;
if(control != null && width >= 0 && height >= 0)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
control.setSize(width, height);
}
});
}
}
/**
* Set the visibility of the eSWT control.
*/
void setVisible(boolean aVisible)
{
visible = aVisible;
if(control != null)
{
ESWTUIThreadRunner.safeSyncExec(new Runnable()
{
public void run()
{
control.setVisible(visible);
}
});
}
}
/**
* Restores a stored state and creates eSWT text control.
*
* @param parent parent composite
*/
private void eswtRestoreStateAndCreate(Composite parent)
{
if(control == null)
{
control = eswtConstructText(parent, style, constraints);
eswtSetInputMode(control, inputMode, constraints);
eswtSetMaxSize(control, maxSize);
eswtSetContent(control, text);
eswtSetSelection(control, caret, caret);
if(width >= 0 && height >= 0)
{
control.setBounds(x, y, width, height);
}
if(fgCol != null)
{
control.setForeground(fgCol);
}
if(bgCol != null)
{
control.setBackground(bgCol);
}
if(font != null)
{
control.setFont(Font.getESWTFont(font));
}
control.setVisible(visible);
eswtSetFocused(control, focused);
eswtAddModListener(control, modifyListener);
eswtAddSelListener(control, selectionListener);
}
}
/**
* Stores the current state and disposes the eSWT text control.
*
* @return the control's parent composite.
*/
private Composite eswtStoreStateAndDispose()
{
Composite parent = null;
if(control != null)
{
parent = control.getParent();
text = eswtGetContent(control);
caret = eswtGetCaretPosition(control);
eswtRemoveModListener(control, modifyListener);
eswtRemoveSelListener(control, selectionListener);
control.dispose();
control = null;
}
return parent;
}
/**
* Add modify listener.
*
* @param control text control
* @param ltnr listener
*/
static void eswtAddModListener(Control control, ModifyListener ltnr)
{
if(control != null && ltnr != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).addModifyListener(ltnr);
}
else
{
((ConstrainedText) control).addModifyListener(ltnr);
}
}
}
/**
* Add selection listener.
*
* @param control text control
* @param ltnr listener
*/
static void eswtAddSelListener(Control control, SelectionListener ltnr)
{
if(control != null && ltnr != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).addSelectionListener(ltnr);
}
else
{
((ConstrainedText) control).addSelectionListener(ltnr);
}
}
}
/**
* Construct text widget with given parameters.
*
* @param parent
* @param aStyle
* @param aConstraints
* @return
*/
static Control eswtConstructText(Composite parent, int aStyle, int aConstraints)
{
Control ret = null;
int style = aStyle;
int extractedFlag = aConstraints & ~TextField.CONSTRAINT_MASK;
int extractedConstraint = aConstraints & TextField.CONSTRAINT_MASK;
if((extractedFlag & TextField.PASSWORD) == TextField.PASSWORD)
{
// Text class will remove incompatible flags for SINGLE
style |= SWT.SINGLE | SWT.PASSWORD;
}
if((extractedFlag & TextField.UNEDITABLE) == TextField.UNEDITABLE)
{
style |= SWT.READ_ONLY;
}
if(extractedConstraint == TextField.NUMERIC)
{
ret = new ConstrainedText(parent, style, ConstrainedText.NUMERIC);
}
else if(extractedConstraint == TextField.DECIMAL)
{
ret = new ConstrainedText(parent, style, ConstrainedText.DECIMAL);
}
else if(extractedConstraint == TextField.PHONENUMBER)
{
ret = new ConstrainedText(parent, style, ConstrainedText.PHONENUMBER);
}
else if(extractedConstraint == TextField.NON_PREDICTIVE
|| extractedConstraint == TextField.SENSITIVE)
{
// We treat non-predictive and sensitive to be equal
ret = new TextExtension(parent, style, TextExtension.NON_PREDICTIVE);
}
else
{
ret = new TextExtension(parent, style);
}
return ret;
}
/**
* Get caret position.
*
* @param control text control
*/
static int eswtGetCaretPosition(Control control)
{
int ret = 0;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getCaretPosition();
}
else
{
ret = ((ConstrainedText) control).getCaretPosition();
}
}
return ret;
}
/**
* Get caret line number.
*
* @param control text control
*/
static int eswtGetCaretLine(Control control)
{
int ret = 0;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getCaretLineNumber();
}
}
return ret;
}
/**
* Get content.
*
* @param control text control
*/
static String eswtGetContent(Control control)
{
String ret = "";
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getText();
}
else
{
ret = ((ConstrainedText) control).getText();
}
}
return ret;
}
/**
* Get line count.
*
* @param control text control
*/
static int eswtGetLineCount(Control control)
{
int ret = 1;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getLineCount();
}
}
return ret;
}
/**
* Get line height.
*
* @param control text control
*/
static int eswtGetLineHeight(Control control)
{
int ret = 0;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getLineHeight();
}
else
{
ret = ((ConstrainedText) control).getSize().y;
}
}
return ret;
}
/**
* Get maximum content size.
*
* @param control text control
*/
static int eswtGetMaxSize(Control control)
{
int ret = 0;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getTextLimit();
}
else
{
ret = ((ConstrainedText) control).getTextLimit();
}
}
return ret;
}
/**
* Get selected content.
*
* @param control text control
*/
static String eswtGetSelectedContent(Control control)
{
String ret = "";
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getSelectionText();
}
else
{
// TODO: eSWT support required - get selection in ConstrainedText
ret = ((ConstrainedText) control).getText();
}
}
return ret;
}
/**
* Get content size.
*
* @param control text control
*/
static int eswtGetSize(Control control)
{
int ret = 0;
if(control != null)
{
if(control instanceof TextExtension)
{
ret = ((TextExtension) control).getCharCount();
}
else
{
ret = ((ConstrainedText) control).getCharCount();
}
}
return ret;
}
/**
* Remove modify listener.
*
* @param control text control
* @param ltnr listener
*/
static void eswtRemoveModListener(Control control, ModifyListener ltnr)
{
if(control != null && ltnr != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).removeModifyListener(ltnr);
}
else
{
((ConstrainedText) control).removeModifyListener(ltnr);
}
}
}
/**
* Remove modify listener.
*
* @param control text control
* @param ltnr listener
*/
static void eswtRemoveSelListener(Control control, SelectionListener ltnr)
{
if(control != null && ltnr != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).removeSelectionListener(ltnr);
}
else
{
((ConstrainedText) control).removeSelectionListener(ltnr);
}
}
}
/**
* Set content.
*
* @param control text control
* @param text content
*/
static void eswtSetContent(Control control, String text)
{
if(control != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).setText(text);
}
else
{
((ConstrainedText) control).setText(text);
}
}
}
/**
* Set text control focus on/off.
*
* @param control text control
* @param focus
*/
static void eswtSetFocused(Control control, boolean focus)
{
if(control != null)
{
if(focus)
{
control.setFocus();
}
else
{
control.getParent().forceFocus();
}
}
}
/**
* Set input mode.
*
* @param control text control
* @param inputMode input mode
* @param aConstraints constraints
*/
static void eswtSetInputMode(Control control, String inputMode,
int aConstraints)
{
if(control != null && control instanceof TextExtension)
{
TextExtension te = (TextExtension) control;
int capitalize = getCapitalize(aConstraints);
if(inputMode == null)
{
te.setInitialInputMode(TextExtension.TEXTCASE,
"UCB_BASIC_LATIN");
}
else if(inputMode.equals("MIDP_UPPERCASE_LATIN"))
{
if(capitalize > 0 && !isUrlEmailSet(aConstraints))
{
te.setInitialInputMode(capitalize, "UCB_BASIC_LATIN");
}
else
{
te.setInitialInputMode(TextExtension.UPPERCASE,
"UCB_BASIC_LATIN");
}
}
else if(inputMode.equals("MIDP_LOWERCASE_LATIN"))
{
if(capitalize > 0 && !isUrlEmailSet(aConstraints))
{
te.setInitialInputMode(capitalize, "UCB_BASIC_LATIN");
}
else
{
te.setInitialInputMode(TextExtension.LOWERCASE,
"UCB_BASIC_LATIN");
}
}
else
{
te.setInitialInputMode(TextExtension.TEXTCASE, inputMode);
}
}
}
/**
* Set maximum size.
*
* @param control text control
* @param maxSize maximum size
*/
static void eswtSetMaxSize(Control control, int maxSize)
{
if(control != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).setTextLimit(maxSize);
}
else
{
((ConstrainedText) control).setTextLimit(maxSize);
}
}
}
/**
* Set selection.
*
* @param control text control
* @param sta start index
* @param end end index
*/
static void eswtSetSelection(Control control, int sta, int end)
{
if(control != null)
{
if(control instanceof TextExtension)
{
((TextExtension) control).setSelection(sta, end);
}
else
{
((ConstrainedText) control).setSelection(sta, end);
}
}
}
/**
* Update vertical scroll bar.
*
* @param control text control
*/
static void eswtUpdateVScrollbar(Control control)
{
if(control != null)
{
if((control.getStyle() & SWT.V_SCROLL) == SWT.V_SCROLL)
{
if(control instanceof TextExtension)
{
TextExtension te = (TextExtension) control;
ScrollBar sb = te.getVerticalBar();
if(sb != null)
{
int height = te.getLineCount() * te.getLineHeight();
sb.setVisible(te.getSize().y < height);
}
}
}
}
}
/**
* Get eSWT capitalize style flags for TextExtension.
*
* @param aConstraints constraints
*/
static int getCapitalize(int aConstraints)
{
int ret = 0;
int extractedFlag = aConstraints & ~TextField.CONSTRAINT_MASK;
if((extractedFlag & TextField.INITIAL_CAPS_WORD)
== TextField.INITIAL_CAPS_WORD)
{
ret = TextExtension.TITLECASE;
}
if((extractedFlag & TextField.INITIAL_CAPS_SENTENCE)
== TextField.INITIAL_CAPS_SENTENCE)
{
ret = TextExtension.TEXTCASE;
}
return ret;
}
/**
* Is Url or Email constraints flags set.
*
* @param aConstraints constraints
*/
static boolean isUrlEmailSet(int aConstraints)
{
int extractedConstraint = aConstraints & TextField.CONSTRAINT_MASK;
return (extractedConstraint == TextField.EMAILADDR
|| extractedConstraint == TextField.URL);
}
/**
* Validates input constraints.
*
* @param aConstraints constraints to check.
* @return true if constraints are OK, false otherwise.
*/
static boolean isValidConstraints(int aConstraints)
{
int smallestFlag;
int highestFlag;
smallestFlag = TextField.PASSWORD - 1;
highestFlag = TextField.PASSWORD + TextField.UNEDITABLE
+ TextField.SENSITIVE + TextField.NON_PREDICTIVE
+ TextField.INITIAL_CAPS_WORD + TextField.INITIAL_CAPS_SENTENCE
+ 1;
int typeConstraint = getTypeConstraint(aConstraints);
if(typeConstraint == TextField.ANY
|| typeConstraint == TextField.EMAILADDR
|| typeConstraint == TextField.NUMERIC
|| typeConstraint == TextField.PHONENUMBER
|| typeConstraint == TextField.DECIMAL
|| typeConstraint == TextField.URL)
{
int extractedFlag = aConstraints & ~TextField.CONSTRAINT_MASK;
if(extractedFlag == 0
|| ((extractedFlag > smallestFlag)
&& (extractedFlag < highestFlag)))
{
return true;
}
}
return false;
}
/**
* Get constraint type.
*
* @param aConstraints constraints
*/
static int getTypeConstraint(int aConstraints)
{
return aConstraints & TextField.CONSTRAINT_MASK;
}
/**
* Checks if the text meets the requirements from constraint.
*
* @param aText
* @return
*/
static boolean isValidText(String aText, int aConstraints)
{
return TextFieldLayouter.checkText(aConstraints, aText);
}
}