From 47b8def1e3ea4d77ff6e988c37f67b663d9c33d9 Mon Sep 17 00:00:00 2001 From: satok Date: Tue, 18 Oct 2011 17:38:42 +0900 Subject: [PATCH] Add hello spell checker sample client app Bug: 4973788 Change-Id: I938ba499c35d91f2e9dbcd00ae0df64c999b2b95 --- build/sdk.atree | 3 +- samples/SpellChecker/Android.mk | 1 + .../SpellChecker/HelloSpellChecker/Android.mk | 12 +++ .../HelloSpellChecker/AndroidManifest.xml | 39 +++++++++ .../HelloSpellChecker/_index.html | 5 ++ .../HelloSpellChecker/res/layout/main.xml | 29 +++++++ .../HelloSpellChecker/res/values/strings.xml | 23 +++++ .../HelloSpellCheckerActivity.java | 87 +++++++++++++++++++ .../SampleSpellCheckerService/Android.mk | 0 .../AndroidManifest.xml | 0 .../SampleSpellCheckerService/_index.html | 0 .../res/values/strings.xml | 0 .../res/xml/spell_checker_settings.xml | 0 .../res/xml/spellchecker.xml | 0 .../#SampleSpellCheckerService.java#} | 0 .../SampleSpellCheckerService.java | 55 ++++++++++++ .../SpellCheckerSettingsActivity.java | 0 .../SpellCheckerSettingsFragment.java | 0 samples/SpellChecker/_index.html | 1 + 19 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 samples/SpellChecker/Android.mk create mode 100755 samples/SpellChecker/HelloSpellChecker/Android.mk create mode 100644 samples/SpellChecker/HelloSpellChecker/AndroidManifest.xml create mode 100755 samples/SpellChecker/HelloSpellChecker/_index.html create mode 100644 samples/SpellChecker/HelloSpellChecker/res/layout/main.xml create mode 100644 samples/SpellChecker/HelloSpellChecker/res/values/strings.xml create mode 100644 samples/SpellChecker/HelloSpellChecker/src/com/example/android/hellospellchecker/HelloSpellCheckerActivity.java rename samples/{ => SpellChecker}/SampleSpellCheckerService/Android.mk (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/AndroidManifest.xml (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/_index.html (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/res/values/strings.xml (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/res/xml/spell_checker_settings.xml (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/res/xml/spellchecker.xml (100%) rename samples/{SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java => SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/#SampleSpellCheckerService.java#} (100%) create mode 100644 samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java rename samples/{ => SpellChecker}/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsActivity.java (100%) rename samples/{ => SpellChecker}/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsFragment.java (100%) create mode 100644 samples/SpellChecker/_index.html diff --git a/build/sdk.atree b/build/sdk.atree index 8742b6aa6..ba7cb86f0 100644 --- a/build/sdk.atree +++ b/build/sdk.atree @@ -170,7 +170,8 @@ development/samples/MultiResolution samples/${PLATFORM_NAME}/MultiRes development/samples/NotePad samples/${PLATFORM_NAME}/NotePad development/samples/NFCDemo samples/${PLATFORM_NAME}/NFCDemo development/samples/RandomMusicPlayer samples/${PLATFORM_NAME}/RandomMusicPlayer -development/samples/SampleSpellCheckerService samples/${PLATFORM_NAME}/SampleSpellCheckerService +development/samples/SpellChecker/SampleSpellCheckerService samples/${PLATFORM_NAME}/SpellChecker/SampleSpellCheckerService +development/samples/SpellChecker/HelloSpellChecker samples/${PLATFORM_NAME}/SpellChecker/HelloSpellChecker development/samples/SampleSyncAdapter samples/${PLATFORM_NAME}/SampleSyncAdapter development/samples/SearchableDictionary samples/${PLATFORM_NAME}/SearchableDictionary development/samples/SipDemo samples/${PLATFORM_NAME}/SipDemo diff --git a/samples/SpellChecker/Android.mk b/samples/SpellChecker/Android.mk new file mode 100644 index 000000000..5053e7d64 --- /dev/null +++ b/samples/SpellChecker/Android.mk @@ -0,0 +1 @@ +include $(call all-subdir-makefiles) diff --git a/samples/SpellChecker/HelloSpellChecker/Android.mk b/samples/SpellChecker/HelloSpellChecker/Android.mk new file mode 100755 index 000000000..1c76f23a8 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := samples + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_SDK_VERSION := current + +LOCAL_PACKAGE_NAME := HelloSpellChecker + +include $(BUILD_PACKAGE) diff --git a/samples/SpellChecker/HelloSpellChecker/AndroidManifest.xml b/samples/SpellChecker/HelloSpellChecker/AndroidManifest.xml new file mode 100644 index 000000000..0a6b90671 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/samples/SpellChecker/HelloSpellChecker/_index.html b/samples/SpellChecker/HelloSpellChecker/_index.html new file mode 100755 index 000000000..414c62987 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/_index.html @@ -0,0 +1,5 @@ +

A simple activity that requests spelling suggestions from a spell checker service, using the TextServicesManager +and SpellCheckerSession +APIs introduced in Android 4.0 (API level 14).

+

For an example that implements a custom spell checker service, see the Spell Checker sample app.

diff --git a/samples/SpellChecker/HelloSpellChecker/res/layout/main.xml b/samples/SpellChecker/HelloSpellChecker/res/layout/main.xml new file mode 100644 index 000000000..3d443e464 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/res/layout/main.xml @@ -0,0 +1,29 @@ + + + + + + + diff --git a/samples/SpellChecker/HelloSpellChecker/res/values/strings.xml b/samples/SpellChecker/HelloSpellChecker/res/values/strings.xml new file mode 100644 index 000000000..fbcb2db25 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/res/values/strings.xml @@ -0,0 +1,23 @@ + + + + + HelloSpellChecker + + diff --git a/samples/SpellChecker/HelloSpellChecker/src/com/example/android/hellospellchecker/HelloSpellCheckerActivity.java b/samples/SpellChecker/HelloSpellChecker/src/com/example/android/hellospellchecker/HelloSpellCheckerActivity.java new file mode 100644 index 000000000..6550981b7 --- /dev/null +++ b/samples/SpellChecker/HelloSpellChecker/src/com/example/android/hellospellchecker/HelloSpellCheckerActivity.java @@ -0,0 +1,87 @@ +/* + * 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 com.example.android.hellospellchecker; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.textservice.SpellCheckerSession; +import android.view.textservice.SuggestionsInfo; +import android.view.textservice.TextInfo; +import android.view.textservice.TextServicesManager; +import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener; +import android.widget.TextView; +import java.lang.StringBuilder; + +public class HelloSpellCheckerActivity extends Activity implements SpellCheckerSessionListener { + private static final String TAG = HelloSpellCheckerActivity.class.getSimpleName(); + private TextView mMainView; + private SpellCheckerSession mScs; + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + mMainView = (TextView)findViewById(R.id.main); + } + + @Override + public void onResume() { + super.onResume(); + final TextServicesManager tsm = (TextServicesManager) getSystemService( + Context.TEXT_SERVICES_MANAGER_SERVICE); + mScs = tsm.newSpellCheckerSession(null, null, this, true); + if (mScs != null) { + // Instantiate TextInfo for each query + // TextInfo can be passed a sequence number and a cookie number to identify the result + mScs.getSuggestions(new TextInfo("tgis"), 3); + mScs.getSuggestions(new TextInfo("hllo"), 3); + mScs.getSuggestions(new TextInfo("helloworld"), 3); + } else { + Log.e(TAG, "Couldn't obtain the spell checker service."); + } + } + + @Override + public void onPause() { + super.onPause(); + if (mScs != null) { + mScs.close(); + } + } + + @Override + public void onGetSuggestions(final SuggestionsInfo[] arg0) { + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < arg0.length; ++i) { + // Returned suggestions are contained in SuggestionsInfo + final int len = arg0[i].getSuggestionsCount(); + sb.append('\n'); + for (int j = 0; j < len; ++j) { + sb.append("," + arg0[i].getSuggestionAt(j)); + } + sb.append(" (" + len + ")"); + } + runOnUiThread(new Runnable() { + @Override + public void run() { + mMainView.append(sb.toString()); + } + }); + } +} diff --git a/samples/SampleSpellCheckerService/Android.mk b/samples/SpellChecker/SampleSpellCheckerService/Android.mk similarity index 100% rename from samples/SampleSpellCheckerService/Android.mk rename to samples/SpellChecker/SampleSpellCheckerService/Android.mk diff --git a/samples/SampleSpellCheckerService/AndroidManifest.xml b/samples/SpellChecker/SampleSpellCheckerService/AndroidManifest.xml similarity index 100% rename from samples/SampleSpellCheckerService/AndroidManifest.xml rename to samples/SpellChecker/SampleSpellCheckerService/AndroidManifest.xml diff --git a/samples/SampleSpellCheckerService/_index.html b/samples/SpellChecker/SampleSpellCheckerService/_index.html similarity index 100% rename from samples/SampleSpellCheckerService/_index.html rename to samples/SpellChecker/SampleSpellCheckerService/_index.html diff --git a/samples/SampleSpellCheckerService/res/values/strings.xml b/samples/SpellChecker/SampleSpellCheckerService/res/values/strings.xml similarity index 100% rename from samples/SampleSpellCheckerService/res/values/strings.xml rename to samples/SpellChecker/SampleSpellCheckerService/res/values/strings.xml diff --git a/samples/SampleSpellCheckerService/res/xml/spell_checker_settings.xml b/samples/SpellChecker/SampleSpellCheckerService/res/xml/spell_checker_settings.xml similarity index 100% rename from samples/SampleSpellCheckerService/res/xml/spell_checker_settings.xml rename to samples/SpellChecker/SampleSpellCheckerService/res/xml/spell_checker_settings.xml diff --git a/samples/SampleSpellCheckerService/res/xml/spellchecker.xml b/samples/SpellChecker/SampleSpellCheckerService/res/xml/spellchecker.xml similarity index 100% rename from samples/SampleSpellCheckerService/res/xml/spellchecker.xml rename to samples/SpellChecker/SampleSpellCheckerService/res/xml/spellchecker.xml diff --git a/samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java b/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/#SampleSpellCheckerService.java# similarity index 100% rename from samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java rename to samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/#SampleSpellCheckerService.java# diff --git a/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java b/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java new file mode 100644 index 000000000..dc85587be --- /dev/null +++ b/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SampleSpellCheckerService.java @@ -0,0 +1,55 @@ +/* + * 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 com.example.android.samplespellcheckerservice; + +import android.service.textservice.SpellCheckerService; +import android.util.Log; +import android.view.textservice.SuggestionsInfo; +import android.view.textservice.TextInfo; + +public class SampleSpellCheckerService extends SpellCheckerService { + private static final String TAG = SampleSpellCheckerService.class.getSimpleName(); + private static final boolean DBG = true; + @Override + public Session createSession() { + return new AndroidSpellCheckerSession(); + } + + private static class AndroidSpellCheckerSession extends Session { + private String mLocale; + @Override + public void onCreate() { + mLocale = getLocale(); + } + + @Override + public SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit) { + if (DBG) { + Log.d(TAG, "onGetSuggestions: " + textInfo.getText()); + } + final String input = textInfo.getText(); + final int length = input.length(); + // Just a fake logic: + // length <= 3 for short words that we assume are in the fake dictionary + // length > 20 for too long words that we assume can't be recognized (such as CJK words) + final int flags = length <= 3 ? SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY + : length <= 20 ? SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO : 0; + return new SuggestionsInfo(flags, + new String[] {"aaa", "bbb", "Candidate for " + input, mLocale}); + } + } +} diff --git a/samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsActivity.java b/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsActivity.java similarity index 100% rename from samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsActivity.java rename to samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsActivity.java diff --git a/samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsFragment.java b/samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsFragment.java similarity index 100% rename from samples/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsFragment.java rename to samples/SpellChecker/SampleSpellCheckerService/src/com/example/android/samplespellcheckerservice/SpellCheckerSettingsFragment.java diff --git a/samples/SpellChecker/_index.html b/samples/SpellChecker/_index.html new file mode 100644 index 000000000..d60c8ca42 --- /dev/null +++ b/samples/SpellChecker/_index.html @@ -0,0 +1 @@ +

A set of samples that demonstrate how to create/use spell checker APIs.