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:
@@ -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 \
|
||||
|
||||
33
core/java/android/text/ITextClassificationService.aidl
Normal file
33
core/java/android/text/ITextClassificationService.aidl
Normal 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();
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user