Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b50ab4ba authored by Joanne Chung's avatar Joanne Chung
Browse files

Allow to use ExtService as TextClassifierService

1. Define a trust TextClassifierService list which contains ExtService. And
also define a DeviceConfig flag which can be set to the TextClassifierService
we would like to use. Because the TextClassfierService can be set to a side-load
app, e.g. CTS tests. If the override flag is not one of the packages in the
trust TextClassifierService list, it should be able to see only text from
its own UID.
2. Made TextClassifierService available for testing.
3. Fix the incoreect order for onConnected().
4. Fix API Lint errors.

Bug: 141111813
Bug: 143249163
Test: atest FrameworksCoreTests:android.view.textclassifier
Test: Manual. dumpsys to check current TextClassifierService. Change flag
to another service, and then check TextClassifierService changing to
expected TextClassifierService.
Test: Manual. Use local TextClassifierService to make sure the service
call order of connection callback and API call is correct.
Change-Id: I37ff298f0c65ae0469bd54e30f1ebf48b77c126c
parent d838847e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -7037,7 +7037,7 @@ package android.service.textclassifier {
    ctor public TextClassifierService();
    method @NonNull public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context);
    method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
    method @Nullable public final android.os.IBinder onBind(android.content.Intent);
    method @Nullable public final android.os.IBinder onBind(@NonNull 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);
@@ -7053,7 +7053,7 @@ package android.service.textclassifier {
  }
  public static interface TextClassifierService.Callback<T> {
    method public void onFailure(CharSequence);
    method public void onFailure(@NonNull CharSequence);
    method public void onSuccess(T);
  }
+28 −0
Original line number Diff line number Diff line
@@ -2856,6 +2856,34 @@ package android.service.quicksettings {

}

package android.service.textclassifier {

  public abstract class TextClassifierService extends android.app.Service {
    ctor public TextClassifierService();
    method @NonNull public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context);
    method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
    method @Nullable public final android.os.IBinder onBind(@NonNull 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>);
    method @MainThread public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextSelection>);
    method @MainThread public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent);
    field public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService";
  }

  public static interface TextClassifierService.Callback<T> {
    method public void onFailure(@NonNull CharSequence);
    method public void onSuccess(T);
  }

}

package android.telecom {

  public final class Call {
+9 −0
Original line number Diff line number Diff line
@@ -3132,6 +3132,15 @@ public class ApplicationPackageManager extends PackageManager {
        }
    }

    @Override
    public String[] getSystemTextClassifierPackages() {
        try {
            return mPM.getSystemTextClassifierPackages();
        } catch (RemoteException e) {
            throw e.rethrowAsRuntimeException();
        }
    }

    @Override
    public String getAttentionServicePackageName() {
        try {
+2 −0
Original line number Diff line number Diff line
@@ -678,6 +678,8 @@ interface IPackageManager {

    String getSystemTextClassifierPackageName();

    String[] getSystemTextClassifierPackages();

    String getAttentionServicePackageName();

    String getWellbeingPackageName();
+11 −0
Original line number Diff line number Diff line
@@ -7390,6 +7390,17 @@ public abstract class PackageManager {
                "getSystemTextClassifierPackageName not implemented in subclass");
    }

    /**
     * @return the system defined text classifier package names, or null if there's none.
     *
     * @hide
     */
    @NonNull
    public String[] getSystemTextClassifierPackages() {
        throw new UnsupportedOperationException(
                "getSystemTextClassifierPackages not implemented in subclass");
    }

    /**
     * @return  attention service package name, or null if there's none.
     *
Loading