From f67f0a584e6dad90a3c6dabff208c3a01fcd51e6 Mon Sep 17 00:00:00 2001 From: Abodunrinwa Toki Date: Thu, 9 Feb 2017 22:41:58 +0000 Subject: [PATCH 1/2] Change package for LangId and SmartSelection. Package change from android.text to android.view.textclassifier. This change was delayed until the native library code was updated to reflect this package change. Test: cts-tradefed run cts-dev -m CtsViewTestCases -t android.view.textclassifier.cts.TextClassificationManagerTest Bug: 34777495 Change-Id: I723aaf79f8fbed4758bb4ee6727dfb6a8e35bf99 --- .../android/{text => view/textclassifier}/LangId.java | 9 +++------ .../{text => view/textclassifier}/SmartSelection.java | 9 +++------ .../view/textclassifier/TextClassificationManager.java | 1 - .../android/view/textclassifier/TextClassifierImpl.java | 1 - 4 files changed, 6 insertions(+), 14 deletions(-) rename core/java/android/{text => view/textclassifier}/LangId.java (86%) rename core/java/android/{text => view/textclassifier}/SmartSelection.java (91%) diff --git a/core/java/android/text/LangId.java b/core/java/android/view/textclassifier/LangId.java similarity index 86% rename from core/java/android/text/LangId.java rename to core/java/android/view/textclassifier/LangId.java index ed6e9097d669c..53bc1b0a0cbfe 100644 --- a/core/java/android/text/LangId.java +++ b/core/java/android/view/textclassifier/LangId.java @@ -13,16 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.text; +package android.view.textclassifier; /** * Java wrapper for LangId native library interface. * This class is used to detect languages in text. - * @hide */ -public final class LangId { - // TODO: Move this to android.view.textclassifier and make it package-private. - // We'll have to update the native library code to do this. +final class LangId { static { System.loadLibrary("smart-selection_jni"); @@ -33,7 +30,7 @@ public final class LangId { /** * Creates a new instance of LangId predictor, using the provided model image. */ - public LangId(int fd) { + LangId(int fd) { mModelPtr = nativeNew(fd); } diff --git a/core/java/android/text/SmartSelection.java b/core/java/android/view/textclassifier/SmartSelection.java similarity index 91% rename from core/java/android/text/SmartSelection.java rename to core/java/android/view/textclassifier/SmartSelection.java index 97ef5149cf23c..47c39e4d2ae5c 100644 --- a/core/java/android/text/SmartSelection.java +++ b/core/java/android/view/textclassifier/SmartSelection.java @@ -14,16 +14,13 @@ * limitations under the License. */ -package android.text; +package android.view.textclassifier; /** * Java wrapper for SmartSelection native library interface. * This library is used for detecting entities in text. - * @hide */ -public final class SmartSelection { - // TODO: Move this to android.view.textclassifier and make it package-private. - // We'll have to update the native library code to do this. +final class SmartSelection { static { System.loadLibrary("smart-selection_jni"); @@ -35,7 +32,7 @@ public final class SmartSelection { * Creates a new instance of SmartSelect predictor, using the provided model image, * given as a file descriptor. */ - public SmartSelection(int fd) { + SmartSelection(int fd) { mCtx = nativeNew(fd); } diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java index a4e524f9882b3..4daa110648b89 100644 --- a/core/java/android/view/textclassifier/TextClassificationManager.java +++ b/core/java/android/view/textclassifier/TextClassificationManager.java @@ -19,7 +19,6 @@ package android.view.textclassifier; import android.annotation.NonNull; import android.content.Context; import android.os.ParcelFileDescriptor; -import android.text.LangId; import android.util.Log; import com.android.internal.util.Preconditions; diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index e2ff44cb37937..8b39775bd0f76 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -27,7 +27,6 @@ import android.graphics.drawable.Drawable; import android.icu.text.BreakIterator; import android.net.Uri; import android.os.ParcelFileDescriptor; -import android.text.SmartSelection; import android.text.Spannable; import android.text.TextUtils; import android.text.method.WordIterator; From c3e7a4fadec256c6dd3e97602f6627cffc2a5daa Mon Sep 17 00:00:00 2001 From: Abodunrinwa Toki Date: Thu, 9 Feb 2017 22:54:47 +0000 Subject: [PATCH 2/2] Introduce a model file for language detection. Test: cts-tradefed run cts-dev -m CtsViewTestCases -t android.view.textclassifier.cts.TextClassificationManagerTest#testLanguageDetection Bug: 34777495 Change-Id: Id4102732d303151839ae54630746f882a98dce29 --- .../TextClassificationManager.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/core/java/android/view/textclassifier/TextClassificationManager.java b/core/java/android/view/textclassifier/TextClassificationManager.java index 4daa110648b89..c4d64d14f8e04 100644 --- a/core/java/android/view/textclassifier/TextClassificationManager.java +++ b/core/java/android/view/textclassifier/TextClassificationManager.java @@ -44,8 +44,9 @@ public final class TextClassificationManager { private final Object mLangIdLock = new Object(); private final Context mContext; - // TODO: Implement a way to close the file descriptor. - private ParcelFileDescriptor mFd; + // TODO: Implement a way to close the file descriptors. + private ParcelFileDescriptor mSmartSelectionFd; + private ParcelFileDescriptor mLangIdFd; private TextClassifier mDefault; private LangId mLangId; @@ -61,10 +62,10 @@ public final class TextClassificationManager { synchronized (mTextClassifierLock) { if (mDefault == null) { try { - mFd = ParcelFileDescriptor.open( + mSmartSelectionFd = ParcelFileDescriptor.open( new File("/etc/assistant/smart-selection.model"), ParcelFileDescriptor.MODE_READ_ONLY); - mDefault = new TextClassifierImpl(mContext, mFd); + mDefault = new TextClassifierImpl(mContext, mSmartSelectionFd); } catch (FileNotFoundException e) { Log.e(LOG_TAG, "Error accessing 'text classifier selection' model file.", e); mDefault = TextClassifier.NO_OP; @@ -99,12 +100,13 @@ public final class TextClassificationManager { return Collections.emptyList(); } - private LangId getLanguageDetector() { + private LangId getLanguageDetector() throws FileNotFoundException { synchronized (mLangIdLock) { if (mLangId == null) { - // TODO: Use a file descriptor as soon as we start to depend on a model file - // for language detection. - mLangId = new LangId(0); + mLangIdFd = ParcelFileDescriptor.open( + new File("/etc/assistant/lang-id.model"), + ParcelFileDescriptor.MODE_READ_ONLY); + mLangId = new LangId(mLangIdFd.getFd()); } return mLangId; }