Add callbacks when TextClassifierService connection status change
Add onConnected() and onDisconnected() when TextClassifierService connect status change. TextClassifierService can do initialization in onConnected() and do cleanup work in onDisconnected(). These callbacks also benefit tests to test some behavior after service connected/disconnected. Bug: 141111813 Test: Manual. Bind service and make sure onConnected() is called, unbind service and make sure onDisconnected() is called. Change-Id: Ic87f00e8fd6679ef8606feba728ad9db6ae6285e
This commit is contained in:
@@ -6907,9 +6907,11 @@ package android.service.textclassifier {
|
||||
method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
|
||||
method @Nullable public final android.os.IBinder onBind(android.content.Intent);
|
||||
method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextClassification>);
|
||||
method public void onConnected();
|
||||
method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId);
|
||||
method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId);
|
||||
method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
|
||||
method public void onDisconnected();
|
||||
method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
|
||||
method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent);
|
||||
method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
|
||||
|
||||
@@ -74,4 +74,6 @@ oneway interface ITextClassifierService {
|
||||
in TextClassificationSessionId sessionId,
|
||||
in ConversationActions.Request request,
|
||||
in ITextClassifierCallback callback);
|
||||
|
||||
void onConnectedStateChanged(int connected);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package android.service.textclassifier;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.MainThread;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -51,6 +52,8 @@ import android.view.textclassifier.TextSelection;
|
||||
|
||||
import com.android.internal.util.Preconditions;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@@ -98,6 +101,18 @@ public abstract class TextClassifierService extends Service {
|
||||
public static final String SERVICE_INTERFACE =
|
||||
"android.service.textclassifier.TextClassifierService";
|
||||
|
||||
/** @hide **/
|
||||
public static final int CONNECTED = 0;
|
||||
/** @hide **/
|
||||
public static final int DISCONNECTED = 1;
|
||||
/** @hide */
|
||||
@IntDef(value = {
|
||||
CONNECTED,
|
||||
DISCONNECTED
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ConnectionState{}
|
||||
|
||||
/** @hide **/
|
||||
private static final String KEY_RESULT = "key_result";
|
||||
|
||||
@@ -195,6 +210,12 @@ public abstract class TextClassifierService extends Service {
|
||||
mMainThreadHandler.post(
|
||||
() -> TextClassifierService.this.onDestroyTextClassificationSession(sessionId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectedStateChanged(@ConnectionState int connected) {
|
||||
mMainThreadHandler.post(connected == CONNECTED ? TextClassifierService.this::onConnected
|
||||
: TextClassifierService.this::onDisconnected);
|
||||
}
|
||||
};
|
||||
|
||||
@Nullable
|
||||
@@ -206,6 +227,26 @@ public abstract class TextClassifierService extends Service {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onUnbind(@NonNull Intent intent) {
|
||||
onDisconnected();
|
||||
return super.onUnbind(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the Android system connects to service.
|
||||
*/
|
||||
public void onConnected() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the Android system disconnects from the service.
|
||||
*
|
||||
* <p> At this point this service may no longer be an active {@link TextClassifierService}.
|
||||
*/
|
||||
public void onDisconnected() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns suggested text selection start and end indices, recognized entity types, and their
|
||||
* associated confidence scores. The entity types are ordered from highest to lowest scoring.
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.os.UserHandle;
|
||||
import android.service.textclassifier.ITextClassifierCallback;
|
||||
import android.service.textclassifier.ITextClassifierService;
|
||||
import android.service.textclassifier.TextClassifierService;
|
||||
import android.service.textclassifier.TextClassifierService.ConnectionState;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseArray;
|
||||
@@ -129,6 +130,10 @@ public final class TextClassificationManagerService extends ITextClassifierServi
|
||||
mLock = new Object();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectedStateChanged(@ConnectionState int connected) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuggestSelection(
|
||||
@Nullable TextClassificationSessionId sessionId,
|
||||
@@ -579,6 +584,11 @@ public final class TextClassificationManagerService extends ITextClassifierServi
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||
init(ITextClassifierService.Stub.asInterface(service));
|
||||
try {
|
||||
mService.onConnectedStateChanged(TextClassifierService.CONNECTED);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(LOG_TAG, "error in onConnectedStateChanged");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user