Skip to content

Commit 41417f3

Browse files
committed
[WriteToType] Adding superimposed mode and general improvements.
1 parent ff2c341 commit 41417f3

File tree

9 files changed

+212
-227
lines changed

9 files changed

+212
-227
lines changed

samples/write-to-type/ReadMe.pdf

-42.1 KB
Binary file not shown.

samples/write-to-type/src/main/java/com/myscript/iink/samples/writetotype/CustomViewGroup.java

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
import android.widget.EditText;
1515
import android.widget.LinearLayout;
1616

17+
import androidx.annotation.NonNull;
18+
1719
import java.util.HashMap;
1820
import java.util.Map;
1921

20-
import androidx.annotation.NonNull;
21-
2222
public class CustomViewGroup extends LinearLayout
2323
{
2424
private static final String PUNCTUATIONS = ".,?!'\"(){}-:;«»„¡¿”•_;·჻՛՜՞՝՚。、~〈〉《》「」〖〗・·…๏๚๛ฯๆ";
25-
private static final String SPACE = "\u0020";
25+
private static final String SPACE = " ";
2626
private static final String NEW_LINE = "\n";
2727

2828
/** Interface definition for callbacks invoked when EditText status changed. */
@@ -34,13 +34,13 @@ public interface OnChangedListener
3434

3535
private OnChangedListener mOnChangedListener = null;
3636

37-
private EditText mEditText = null;
37+
private EditText mFocusedEditText = null;
3838
private final Map<Integer, Integer> mIndexMap = new HashMap<>();
3939

4040
/** Event Listener for selection changed and focus changed of EditText. */
4141
final private View.AccessibilityDelegate mViewDelegate = new View.AccessibilityDelegate() {
4242
@Override
43-
public void sendAccessibilityEvent(View host, int eventType)
43+
public void sendAccessibilityEvent(@NonNull View host, int eventType)
4444
{
4545
super.sendAccessibilityEvent(host, eventType);
4646

@@ -55,7 +55,7 @@ public void sendAccessibilityEvent(View host, int eventType)
5555

5656
if (eventType == AccessibilityEvent.TYPE_VIEW_FOCUSED)
5757
{
58-
if ((mOnChangedListener != null) && (host == mEditText))
58+
if ((mOnChangedListener != null) && (host == mFocusedEditText))
5959
{
6060
mOnChangedListener.onFocusChanged((EditText) host);
6161
}
@@ -175,17 +175,17 @@ public EditText setFocus(final int index)
175175

176176
public void setFocus(EditText editText)
177177
{
178-
if (editText != mEditText)
178+
if (editText != mFocusedEditText)
179179
{
180-
mEditText = editText;
180+
mFocusedEditText = editText;
181181
editText.setAccessibilityDelegate(mViewDelegate);
182182
editText.requestFocus();
183183
}
184184
}
185185

186186
public void setSelection(EditText editText, final float x, final float y, final boolean range, final int color)
187187
{
188-
if (editText == mEditText)
188+
if (editText == mFocusedEditText)
189189
{
190190
int position = findCursorByPosition(editText, x, y);
191191
String text = editText.getText().toString();
@@ -235,7 +235,7 @@ else if (PUNCTUATIONS.contains(charAtPosition))
235235

236236
public void setSelection(EditText editText, @NonNull final RectF selectionRect, final int color)
237237
{
238-
if (editText == mEditText)
238+
if (editText == mFocusedEditText)
239239
{
240240
editText.setHighlightColor(color);
241241

@@ -248,7 +248,7 @@ public void setSelection(EditText editText, @NonNull final RectF selectionRect,
248248

249249
public void setText(EditText editText, @NonNull final String label)
250250
{
251-
if (editText == mEditText)
251+
if (editText == mFocusedEditText)
252252
{
253253
int start = editText.getSelectionStart();
254254
int end = editText.getSelectionEnd();
@@ -277,23 +277,9 @@ public void setText(EditText editText, @NonNull final String label)
277277
}
278278
}
279279

280-
public void eraseText(EditText editText, @NonNull final RectF eraseRect)
281-
{
282-
if (editText == mEditText)
283-
{
284-
int start = findCursorByPosition(editText, eraseRect.left, eraseRect.centerY());
285-
int end = findCursorByPosition(editText, eraseRect.right, eraseRect.centerY());
286-
287-
editText.setSelection(start);
288-
289-
Editable editable = editText.getEditableText();
290-
editable.delete(start, end);
291-
}
292-
}
293-
294280
public void setSpace(EditText editText, final float x, final float y)
295281
{
296-
if (editText == mEditText)
282+
if (editText == mFocusedEditText)
297283
{
298284
int position = findCursorByPosition(editText, x, y);
299285

@@ -321,7 +307,7 @@ else if (isMultiLine(editText))
321307

322308
public void eraseSpace(EditText editText, final float x, final float y)
323309
{
324-
if (editText == mEditText)
310+
if (editText == mFocusedEditText)
325311
{
326312
int position = findCursorByPosition(editText, x, y);
327313

@@ -346,7 +332,7 @@ else if (isMultiLine(editText))
346332

347333
public void forwardCursor(EditText editText)
348334
{
349-
if (editText == mEditText)
335+
if (editText == mFocusedEditText)
350336
{
351337
int start = editText.getSelectionStart();
352338
int end = editText.getSelectionEnd();
@@ -366,7 +352,7 @@ else if (end < text.length())
366352

367353
public void backwardDelete(EditText editText)
368354
{
369-
if (editText == mEditText)
355+
if (editText == mFocusedEditText)
370356
{
371357
int start = editText.getSelectionStart();
372358
int end = editText.getSelectionEnd();

samples/write-to-type/src/main/java/com/myscript/iink/samples/writetotype/MainActivity.java

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44

55
package com.myscript.iink.samples.writetotype;
66

7-
import androidx.annotation.NonNull;
8-
import androidx.appcompat.app.AppCompatActivity;
9-
107
import android.content.Context;
118
import android.os.Bundle;
129
import android.os.Vibrator;
@@ -16,20 +13,21 @@
1613
import android.view.WindowManager;
1714
import android.widget.TextView;
1815

16+
import androidx.annotation.NonNull;
17+
import androidx.appcompat.app.AppCompatActivity;
18+
1919
import com.myscript.iink.Configuration;
2020
import com.myscript.iink.Engine;
21-
import com.myscript.iink.samples.writetotype.core.WriteToTypeWidget;
21+
import com.myscript.iink.samples.writetotype.core.inkcapture.InkCaptureView;
2222
import com.myscript.iink.samples.writetotype.im.InputMethodEmulator;
2323
import com.myscript.iink.samples.writetotype.utils.ErrorActivity;
2424

25-
import java.io.File;
26-
27-
public class MainActivity extends AppCompatActivity implements WriteToTypeWidget.OnDebugListener
25+
public class MainActivity extends AppCompatActivity implements WriteToTypeManager.OnDebugListener
2826
{
2927
private static final float INCH_IN_MILLIMETER = 25.4f;
3028

3129
private CustomViewGroup mViewGroup;
32-
private WriteToTypeWidget mWriteToTypeWidget;
30+
private WriteToTypeManager mWriteToTypeManager;
3331
private InputMethodEmulator mInputMethod;
3432
private TextView mLogView;
3533

@@ -51,43 +49,52 @@ protected void onCreate(Bundle savedInstanceState)
5149
// configure recognition
5250
Configuration conf = mEngine.getConfiguration();
5351
String confDir = "zip://" + getPackageCodePath() + "!/assets/conf";
54-
conf.setStringArray("configuration-manager.search-path", new String[]{ confDir });
55-
String tempDir = getFilesDir().getPath() + File.separator + "tmp";
56-
conf.setString("content-package.temp-folder", tempDir);
52+
conf.setStringArray("recognizer.configuration-manager.search-path", new String[]{ confDir });
53+
setSuperimposed(true);
5754

5855
mLogView = findViewById(R.id.text_view_log);
5956
mLogView.setMovementMethod(new ScrollingMovementMethod());
6057

6158
mViewGroup = findViewById(R.id.custom_view_group);
62-
mWriteToTypeWidget = findViewById(R.id.writetotype);
63-
mWriteToTypeWidget.setOnDebugListener(this);
64-
mWriteToTypeWidget.setActiveStylusOnly(false);
59+
InkCaptureView inkCaptureView = findViewById(R.id.ink_capture_view);
60+
mWriteToTypeManager = new WriteToTypeManager(inkCaptureView);
61+
mWriteToTypeManager.setOnDebugListener(this);
62+
mWriteToTypeManager.setActiveStylusOnly(false);
6563

6664
// Configuring iink in post runnable may not need.
6765
// It will be replaced by just calling of 'setIInkEngine()' and 'setLanguage' later on.
68-
mWriteToTypeWidget.post(new Runnable()
69-
{
70-
@Override
71-
public void run()
72-
{
73-
mWriteToTypeWidget.setIInkEngine(mEngine);
74-
mWriteToTypeWidget.setLanguage("en_US");
75-
mWriteToTypeWidget.setCommitTimeout(500);
76-
77-
final float scaleY = INCH_IN_MILLIMETER / getResources().getDisplayMetrics().ydpi;
78-
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
79-
mInputMethod = new InputMethodEmulator(mWriteToTypeWidget, mViewGroup, scaleY, vibrator);
80-
81-
mInputMethod.setDebugView((DebugView) findViewById(R.id.debug_view)); // DEBUG ONLY
82-
mInputMethod.setDefaultEditText(0);
83-
}
66+
inkCaptureView.post(() -> {
67+
mWriteToTypeManager.setIInkEngine(mEngine);
68+
mWriteToTypeManager.setLanguage("en_US");
69+
mWriteToTypeManager.setCommitTimeout(500);
70+
71+
final float scaleY = INCH_IN_MILLIMETER / getResources().getDisplayMetrics().ydpi;
72+
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
73+
mInputMethod = new InputMethodEmulator(mWriteToTypeManager, mViewGroup, scaleY, vibrator);
74+
75+
mInputMethod.setDebugView((DebugView) findViewById(R.id.debug_view)); // DEBUG ONLY
76+
mInputMethod.setDefaultEditText(0);
8477
});
8578
}
8679

80+
private void setSuperimposed(boolean enable)
81+
{
82+
mEngine.getConfiguration().setString("recognizer.text.configuration.name", enable ? "text-superimposed" : "text");
83+
if (mWriteToTypeManager != null)
84+
{
85+
mWriteToTypeManager.resetTextRecognizer();
86+
}
87+
}
88+
89+
private boolean isSuperimposed()
90+
{
91+
return "text-superimposed".equals(mEngine.getConfiguration().getString("recognizer.text.configuration.name"));
92+
}
93+
8794
@Override
8895
protected void onDestroy()
8996
{
90-
mWriteToTypeWidget.destroy();
97+
mWriteToTypeManager.destroy();
9198

9299
// IInkApplication has the ownership, do not close here
93100
mEngine = null;
@@ -114,8 +121,15 @@ public boolean onOptionsItemSelected(@NonNull MenuItem item)
114121

115122
if (item.getItemId() == R.id.action_debug_view)
116123
{
117-
item.setChecked(!item.isChecked());
118-
mInputMethod.setDebug(item.isChecked());
124+
boolean isDebug = !mInputMethod.isDebug();
125+
item.setTitle(isDebug ? R.string.menu_debug_on : R.string.menu_debug_off);
126+
mInputMethod.setDebug(isDebug);
127+
}
128+
else if (item.getItemId() == R.id.action_toggle_recognizer)
129+
{
130+
boolean isSuperimposed = !isSuperimposed();
131+
item.setTitle(isSuperimposed ? R.string.menu_recognizer_superimposed_on : R.string.menu_recognizer_superimposed_off);
132+
setSuperimposed(isSuperimposed);
119133
}
120134

121135
return super.onOptionsItemSelected(item);

0 commit comments

Comments
 (0)