Front
End Processor Overview

Purpose

Front
End Processors, or FEPs, enable users to input characters that are not on
the device keyboard. For most phones a FEP is essential for entering anything
anything other than numbers. Typically FEPs are used for processing multi-tap
keypad input, predictive text, handwriting recognition, voice recognition
and character selection.

Architectural
relationships

FEPs are ECOM plugins that implement the FEP interface.
They typically use the UI Control Framework to intercept key and pointer events
which are processed as necessary and the output sent to the current application.
Applications do not need to be aware that a FEP is present.

Note that
until the introduction of Platform
Security FEPs were implemented as polymorphic DLLs. Significantly,
under Platsec, FEPs require a capability of All - Tcb as they may be
loaded by any application.

Description

The
FEP base, CCoeFep, is the abstract base class from which
a FEP is derived. A FEP is typically implemented to have a window owning control,
the standard means of receiving input events. The UI Control Framework uses
a control stack to determine the order in which controls are offered key events.
A FEP places its control on the stack with a high priority such that it has
first access to key events.

Figure: FEP Base

The Window Server provides support for windows that float above
other windows in the application. This allows a FEP to have a visible presence.

Each
running application has its own instance of the current FEP. Support is provided
for synchronising attributes across all instances so that there appears to
be only one.

Control input-capabilities

A FEP must
be able to discover the input-capabilities of the target control(s) to determine
what output is appropriate. Input capabilities are provided by TCoeInputCapabilities.

FEP-aware
text editors

A text-editing control can be designed to be closely
integrated with a FEP by implementing MCoeFepAwareTextEditor.
Most of the Symbian provided editing controls do this. The use of in-line
editing in FEP aware editors can mean that a FEP has no obvious visible presence
at all.

Foreground observer

A FEP can implement an
observer interface to be notified when the application goes into the foreground
or background. The foreground observer is MCoeForegroundObserver.

Focus
observer

A FEP can implement an observer to be notified when controls
under the FEP gain or lose focus. The FEP can then discover the input-capabilities
of the current target control(s). The focus observer is MCoeFocusObserver.