Implement TextClassification system service.

- This service provides the TextClassificationManager access to the
  classification model file.
  See: Icb82b707c9c1b4dcb739f44d888bbc43bc3b03bb
- This service is started at boot time.
  See: Ie4a597bc5c6c4140afbcf7feaa9dd237a3fd5fef

Test: Manually tested. Also see: Ic2a5eceeaec4cd2943c6c753084df46d30511fee
Bug: 32503402
Change-Id: Ic428d00f291e268211866b3fc6b7acbc3eb04e1e
This commit is contained in:
Abodunrinwa Toki
2016-12-14 15:38:56 +00:00
parent e19fa20ca5
commit c565e1d3ce
4 changed files with 112 additions and 0 deletions

View File

@@ -305,6 +305,7 @@ LOCAL_SRC_FILES += \
core/java/android/service/wallpaper/IWallpaperService.aidl \
core/java/android/service/chooser/IChooserTargetService.aidl \
core/java/android/service/chooser/IChooserTargetResult.aidl \
core/java/android/text/ITextClassificationService.aidl \
core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl\
core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl\
core/java/android/view/accessibility/IAccessibilityManager.aidl \

View File

@@ -0,0 +1,33 @@
/*
* Copyright (C) 2016 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 android.text;
import android.os.ParcelFileDescriptor;
/**
* Interface to the text classification service, which grants access to the text classification
* LSTM model file.
* {@hide}
*/
interface ITextClassificationService {
/**
* Request a file descriptor with read-only access to the LSTM model file.
* This file descriptor should be closed after the client is done with it.
*/
ParcelFileDescriptor getModelFileFd();
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright (C) 2016 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.android.server.text;
import android.content.Context;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.text.ITextClassificationService;
import android.util.Slog;
import com.android.server.SystemService;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* Text classification service.
* This is used to provide access to the text classification LSTM model file.
*/
public class TextClassificationService extends ITextClassificationService.Stub {
private static final String LOG_TAG = "TextClassificationService";
public static final class Lifecycle extends SystemService {
private TextClassificationService mService;
public Lifecycle(Context context) {
super(context);
mService = new TextClassificationService();
}
@Override
public void onStart() {
try {
publishBinderService(Context.TEXT_CLASSIFICATION_SERVICE, mService);
} catch (Throwable t) {
// Starting this service is not critical to the running of this device and should
// therefore not crash the device. If it fails, log the error and continue.
Slog.e(LOG_TAG, "Could not start the TextClassificationService.", t);
}
}
}
@Override
public synchronized ParcelFileDescriptor getModelFileFd() throws RemoteException {
try {
return ParcelFileDescriptor.open(
new File("/etc/assistant/smart-selection.model"),
ParcelFileDescriptor.MODE_READ_ONLY);
} catch (Throwable t) {
Slog.e(LOG_TAG, "Error retrieving an fd to the text classification model file.", t);
throw new RemoteException(t.getMessage());
}
}
}

View File

@@ -100,6 +100,7 @@ import com.android.server.soundtrigger.SoundTriggerService;
import com.android.server.statusbar.StatusBarManagerService;
import com.android.server.storage.DeviceStorageMonitorService;
import com.android.server.telecom.TelecomLoaderService;
import com.android.server.text.TextClassificationService;
import com.android.server.trust.TrustManagerService;
import com.android.server.tv.TvInputManagerService;
import com.android.server.tv.TvRemoteService;
@@ -896,6 +897,12 @@ public final class SystemServer {
traceEnd();
}
if (!disableNonCoreServices) {
traceBeginAndSlog("StartTextClassificationService");
mSystemServiceManager.startService(TextClassificationService.Lifecycle.class);
traceEnd();
}
if (!disableNetwork) {
traceBeginAndSlog("StartNetworkScoreService");
try {