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

Commit 749b8898 authored by Felipe Leme's avatar Felipe Leme
Browse files

Yet another (major) refactoring on Content Capture and Augmented Autofill.

Bunch of changes:

- Split public SmartSuggestionsService info ContentCaptureService and
  AugmentedAutofillService
- Renamed 'intelligence' packages to either 'contentcapture' or
  'autofil.augmented'
- Renamed internal packages and classes.
- Changed permissions, resource names, etc...
- Moved Augmented Autofill logic from IntelligeceManagerService (R.I.P.) to
  Autofill.
- Optimized IPCs by passing a String instead of the InteractionSessionId
  (that also solves the view -> service dependency).

Test: atest CtsContentCaptureServiceTestCases \
            CtsAutoFillServiceTestCases \
            FrameworksCoreTests:SettingsBackupTest
Test: manual verification with Augmented Autofill Service

Bug: 119638877
Bug: 117944706

Change-Id: I787fc2a0dbd9ad53e4d5edb0d2a9242346e4652d
parent a61278de
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -268,6 +268,8 @@ java_defaults {
        "core/java/android/rolecontrollerservice/IRoleControllerService.aidl",
        ":keystore_aidl",
        "core/java/android/security/keymaster/IKeyAttestationApplicationIdProvider.aidl",
        "core/java/android/service/autofill/augmented/IAugmentedAutofillService.aidl",
        "core/java/android/service/autofill/augmented/IFillCallback.aidl",
        "core/java/android/service/autofill/IAutoFillService.aidl",
        "core/java/android/service/autofill/IAutofillFieldClassificationService.aidl",
        "core/java/android/service/autofill/IFillCallback.aidl",
@@ -290,7 +292,7 @@ java_defaults {
        "core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl",
        "core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl",
        "core/java/android/service/gatekeeper/IGateKeeperService.aidl",
        "core/java/android/service/intelligence/IIntelligenceService.aidl",
        "core/java/android/service/contentcapture/IContentCaptureService.aidl",
        "core/java/android/service/notification/INotificationListener.aidl",
        "core/java/android/service/notification/IStatusBarNotificationHolder.aidl",
        "core/java/android/service/notification/IConditionListener.aidl",
@@ -351,7 +353,7 @@ java_defaults {
        "core/java/android/view/autofill/IAutoFillManagerClient.aidl",
        "core/java/android/view/autofill/IAugmentedAutofillManagerClient.aidl",
        "core/java/android/view/autofill/IAutofillWindowPresenter.aidl",
        "core/java/android/view/intelligence/IIntelligenceManager.aidl",
        "core/java/android/view/contentcapture/IContentCaptureManager.aidl",
        "core/java/android/view/IApplicationToken.aidl",
        "core/java/android/view/IAppTransitionAnimationSpecsFuture.aidl",
        "core/java/android/view/IDockedStackListener.aidl",
+16 −16
Original line number Diff line number Diff line
@@ -34659,6 +34659,7 @@ package android.os {
    field public static final java.lang.String DISALLOW_CONFIG_TETHERING = "no_config_tethering";
    field public static final java.lang.String DISALLOW_CONFIG_VPN = "no_config_vpn";
    field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi";
    field public static final java.lang.String DISALLOW_CONTENT_CAPTURE = "no_content_capture";
    field public static final java.lang.String DISALLOW_CREATE_WINDOWS = "no_create_windows";
    field public static final java.lang.String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste";
    field public static final java.lang.String DISALLOW_DATA_ROAMING = "no_data_roaming";
@@ -34668,7 +34669,6 @@ package android.os {
    field public static final java.lang.String DISALLOW_INSTALL_APPS = "no_install_apps";
    field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources";
    field public static final java.lang.String DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY = "no_install_unknown_sources_globally";
    field public static final java.lang.String DISALLOW_INTELLIGENCE_CAPTURE = "no_intelligence_capture";
    field public static final java.lang.String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts";
    field public static final java.lang.String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media";
    field public static final java.lang.String DISALLOW_NETWORK_RESET = "no_network_reset";
@@ -51850,6 +51850,21 @@ package android.view.autofill {
}
package android.view.contentcapture {
  public final class ContentCaptureManager {
    method public android.content.ComponentName getServiceComponentName();
    method public boolean isContentCaptureEnabled();
    method public android.view.ViewStructure newVirtualViewStructure(android.view.autofill.AutofillId, int);
    method public void notifyViewAppeared(android.view.ViewStructure);
    method public void notifyViewDisappeared(android.view.autofill.AutofillId);
    method public void notifyViewTextChanged(android.view.autofill.AutofillId, java.lang.CharSequence, int);
    method public void setContentCaptureEnabled(boolean);
    field public static final int FLAG_USER_INPUT = 1; // 0x1
  }
}
package android.view.inputmethod {
  public class BaseInputConnection implements android.view.inputmethod.InputConnection {
@@ -52331,21 +52346,6 @@ package android.view.inspector {
}
package android.view.intelligence {
  public final class ContentCaptureManager {
    method public android.content.ComponentName getServiceComponentName();
    method public boolean isContentCaptureEnabled();
    method public android.view.ViewStructure newVirtualViewStructure(android.view.autofill.AutofillId, int);
    method public void notifyViewAppeared(android.view.ViewStructure);
    method public void notifyViewDisappeared(android.view.autofill.AutofillId);
    method public void notifyViewTextChanged(android.view.autofill.AutofillId, java.lang.CharSequence, int);
    method public void setContentCaptureEnabled(boolean);
    field public static final int FLAG_USER_INPUT = 1; // 0x1
  }
}
package android.view.textclassifier {
  public final class ConversationActions implements android.os.Parcelable {
+125 −114
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@ package android {
    field public static final java.lang.String BACKUP = "android.permission.BACKUP";
    field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
    field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
    field public static final java.lang.String BIND_AUGMENTED_AUTOFILL_SERVICE = "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE";
    field public static final deprecated java.lang.String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE";
    field public static final java.lang.String BIND_CONTENT_CAPTURE_SERVICE = "android.permission.BIND_CONTENT_CAPTURE_SERVICE";
    field public static final java.lang.String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH";
    field public static final java.lang.String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE";
    field public static final java.lang.String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE";
@@ -33,7 +35,6 @@ package android {
    field public static final java.lang.String BIND_RESOLVER_RANKER_SERVICE = "android.permission.BIND_RESOLVER_RANKER_SERVICE";
    field public static final java.lang.String BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE = "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE";
    field public static final java.lang.String BIND_SETTINGS_SUGGESTIONS_SERVICE = "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE";
    field public static final java.lang.String BIND_SMART_SUGGESTIONS_SERVICE = "android.permission.BIND_SMART_SUGGESTIONS_SERVICE";
    field public static final java.lang.String BIND_SOUND_TRIGGER_DETECTION_SERVICE = "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE";
    field public static final java.lang.String BIND_TELEPHONY_DATA_SERVICE = "android.permission.BIND_TELEPHONY_DATA_SERVICE";
    field public static final java.lang.String BIND_TELEPHONY_NETWORK_SERVICE = "android.permission.BIND_TELEPHONY_NETWORK_SERVICE";
@@ -105,11 +106,11 @@ package android {
    field public static final java.lang.String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL";
    field public static final java.lang.String MANAGE_CARRIER_OEM_UNLOCK_STATE = "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE";
    field public static final java.lang.String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES";
    field public static final java.lang.String MANAGE_CONTENT_CAPTURE = "android.permission.MANAGE_CONTENT_CAPTURE";
    field public static final java.lang.String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
    field public static final java.lang.String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
    field public static final java.lang.String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
    field public static final java.lang.String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS";
    field public static final java.lang.String MANAGE_SMART_SUGGESTIONS = "android.permission.MANAGE_SMART_SUGGESTIONS";
    field public static final java.lang.String MANAGE_SOUND_TRIGGER = "android.permission.MANAGE_SOUND_TRIGGER";
    field public static final java.lang.String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS";
    field public static final java.lang.String MANAGE_USB = "android.permission.MANAGE_USB";
@@ -4858,6 +4859,69 @@ package android.service.autofill {

}

package android.service.autofill.augmented {

  public abstract class AugmentedAutofillService extends android.app.Service {
    ctor public AugmentedAutofillService();
    method public void onFillRequest(android.service.autofill.augmented.FillRequest, android.os.CancellationSignal, android.service.autofill.augmented.FillController, android.service.autofill.augmented.FillCallback);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
  }

  public final class FillCallback {
    method public void onSuccess(android.service.autofill.augmented.FillResponse);
  }

  public final class FillController {
    method public void autofill(java.util.List<android.util.Pair<android.view.autofill.AutofillId, android.view.autofill.AutofillValue>>);
  }

  public final class FillRequest {
    method public android.content.ComponentName getActivityComponent();
    method public android.view.autofill.AutofillId getFocusedId();
    method public android.view.autofill.AutofillValue getFocusedValue();
    method public android.service.autofill.augmented.PresentationParams getPresentationParams();
    method public int getTaskId();
  }

  public final class FillResponse implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.autofill.augmented.FillResponse> CREATOR;
  }

  public static final class FillResponse.Builder {
    ctor public FillResponse.Builder();
    method public android.service.autofill.augmented.FillResponse build();
    method public android.service.autofill.augmented.FillResponse.Builder setFillWindow(android.service.autofill.augmented.FillWindow);
    method public android.service.autofill.augmented.FillResponse.Builder setIgnoredIds(java.util.List<android.view.autofill.AutofillId>);
  }

  public final class FillWindow implements java.lang.AutoCloseable {
    ctor public FillWindow();
    method public void destroy();
    method public boolean update(android.service.autofill.augmented.PresentationParams.Area, android.view.View, long);
    field public static final long FLAG_METADATA_ADDRESS = 1L; // 0x1L
  }

  public abstract class PresentationParams {
    method public int getFlags();
    method public android.service.autofill.augmented.PresentationParams.Area getFullArea();
    method public android.service.autofill.augmented.PresentationParams.Area getSuggestionArea();
    field public static final int FLAG_HINT_GRAVITY_BOTTOM = 2; // 0x2
    field public static final int FLAG_HINT_GRAVITY_LEFT = 4; // 0x4
    field public static final int FLAG_HINT_GRAVITY_RIGHT = 8; // 0x8
    field public static final int FLAG_HINT_GRAVITY_TOP = 1; // 0x1
    field public static final int FLAG_HOST_IME = 16; // 0x10
    field public static final int FLAG_HOST_SYSTEM = 32; // 0x20
  }

  public static abstract class PresentationParams.Area {
    method public android.graphics.Rect getBounds();
    method public android.service.autofill.augmented.PresentationParams.Area getSubArea(android.graphics.Rect);
  }

}

package android.service.carrier {

  public abstract class ApnService extends android.app.Service {
@@ -4868,6 +4932,58 @@ package android.service.carrier {

}

package android.service.contentcapture {

  public final class ContentCaptureEventsRequest implements android.os.Parcelable {
    method public int describeContents();
    method public java.util.List<android.view.contentcapture.ContentCaptureEvent> getEvents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.contentcapture.ContentCaptureEventsRequest> CREATOR;
  }

  public abstract class ContentCaptureService extends android.app.Service {
    ctor public ContentCaptureService();
    method public final java.util.Set<android.content.ComponentName> getContentCaptureDisabledActivities();
    method public final java.util.Set<java.lang.String> getContentCaptureDisabledPackages();
    method public void onActivitySnapshot(android.service.contentcapture.InteractionSessionId, android.service.contentcapture.SnapshotData);
    method public abstract void onContentCaptureEventsRequest(android.service.contentcapture.InteractionSessionId, android.service.contentcapture.ContentCaptureEventsRequest);
    method public void onCreateInteractionSession(android.service.contentcapture.InteractionContext, android.service.contentcapture.InteractionSessionId);
    method public void onDestroyInteractionSession(android.service.contentcapture.InteractionSessionId);
    method public final void setActivityContentCaptureEnabled(android.content.ComponentName, boolean);
    method public final void setContentCaptureWhitelist(java.util.List<java.lang.String>, java.util.List<android.content.ComponentName>);
    method public final void setPackageContentCaptureEnabled(java.lang.String, boolean);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.contentcapture.ContentCaptureService";
  }

  public final class InteractionContext implements android.os.Parcelable {
    method public int describeContents();
    method public android.content.ComponentName getActivityComponent();
    method public int getDisplayId();
    method public int getFlags();
    method public int getTaskId();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.contentcapture.InteractionContext> CREATOR;
    field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1
    field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2
  }

  public final class InteractionSessionId implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.contentcapture.InteractionSessionId> CREATOR;
  }

  public final class SnapshotData implements android.os.Parcelable {
    method public int describeContents();
    method public android.app.assist.AssistContent getAssistContent();
    method public android.os.Bundle getAssistData();
    method public android.app.assist.AssistStructure getAssistStructure();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
  }

}

package android.service.euicc {

  public final class EuiccProfileInfo implements android.os.Parcelable {
@@ -4988,111 +5104,6 @@ package android.service.euicc {

}

package android.service.intelligence {

  public final class ContentCaptureEventsRequest implements android.os.Parcelable {
    method public int describeContents();
    method public java.util.List<android.view.intelligence.ContentCaptureEvent> getEvents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.intelligence.ContentCaptureEventsRequest> CREATOR;
  }

  public final class FillCallback {
    method public void onSuccess(android.service.intelligence.FillResponse);
  }

  public final class FillController {
    method public void autofill(java.util.List<android.util.Pair<android.view.autofill.AutofillId, android.view.autofill.AutofillValue>>);
  }

  public final class FillRequest {
    method public android.view.autofill.AutofillValue getFocusedAutofillValue();
    method public android.view.autofill.AutofillId getFocusedId();
    method public android.service.intelligence.PresentationParams getPresentationParams();
    method public android.service.intelligence.InteractionSessionId getSessionId();
  }

  public final class FillResponse implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.intelligence.FillResponse> CREATOR;
  }

  public static class FillResponse.Builder {
    ctor public FillResponse.Builder();
    method public android.service.intelligence.FillResponse build();
    method public android.service.intelligence.FillResponse.Builder setFillWindow(android.service.intelligence.FillWindow);
    method public android.service.intelligence.FillResponse.Builder setIgnoredIds(java.util.List<android.view.autofill.AutofillId>);
  }

  public final class FillWindow {
    ctor public FillWindow();
    method public void destroy();
    method public boolean update(android.service.intelligence.PresentationParams.Area, android.view.View, long);
    field public static final long FLAG_METADATA_ADDRESS = 1L; // 0x1L
  }

  public final class InteractionContext implements android.os.Parcelable {
    method public int describeContents();
    method public android.content.ComponentName getActivityComponent();
    method public int getDisplayId();
    method public int getFlags();
    method public int getTaskId();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.intelligence.InteractionContext> CREATOR;
    field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1
    field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2
  }

  public final class InteractionSessionId implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.intelligence.InteractionSessionId> CREATOR;
  }

  public abstract class PresentationParams {
    method public int getFlags();
    method public android.service.intelligence.PresentationParams.Area getFullArea();
    method public android.service.intelligence.PresentationParams.Area getSuggestionArea();
    field public static final int FLAG_HINT_GRAVITY_BOTTOM = 2; // 0x2
    field public static final int FLAG_HINT_GRAVITY_LEFT = 4; // 0x4
    field public static final int FLAG_HINT_GRAVITY_RIGHT = 8; // 0x8
    field public static final int FLAG_HINT_GRAVITY_TOP = 1; // 0x1
    field public static final int FLAG_HOST_IME = 16; // 0x10
    field public static final int FLAG_HOST_SYSTEM = 32; // 0x20
  }

  public static abstract class PresentationParams.Area {
    method public android.graphics.Rect getBounds();
    method public android.service.intelligence.PresentationParams.Area getSubArea(android.graphics.Rect);
  }

  public abstract class SmartSuggestionsService extends android.app.Service {
    ctor public SmartSuggestionsService();
    method public final java.util.Set<android.content.ComponentName> getContentCaptureDisabledActivities();
    method public final java.util.Set<java.lang.String> getContentCaptureDisabledPackages();
    method public void onActivitySnapshot(android.service.intelligence.InteractionSessionId, android.service.intelligence.SnapshotData);
    method public abstract void onContentCaptureEventsRequest(android.service.intelligence.InteractionSessionId, android.service.intelligence.ContentCaptureEventsRequest);
    method public void onCreateInteractionSession(android.service.intelligence.InteractionContext, android.service.intelligence.InteractionSessionId);
    method public void onDestroyInteractionSession(android.service.intelligence.InteractionSessionId);
    method public void onFillRequest(android.service.intelligence.InteractionSessionId, android.service.intelligence.FillRequest, android.os.CancellationSignal, android.service.intelligence.FillController, android.service.intelligence.FillCallback);
    method public final void setActivityContentCaptureEnabled(android.content.ComponentName, boolean);
    method public final void setContentCaptureWhitelist(java.util.List<java.lang.String>, java.util.List<android.content.ComponentName>);
    method public final void setPackageContentCaptureEnabled(java.lang.String, boolean);
    field public static final java.lang.String SERVICE_INTERFACE = "android.service.intelligence.SmartSuggestionsService";
  }

  public final class SnapshotData implements android.os.Parcelable {
    method public int describeContents();
    method public android.app.assist.AssistContent getAssistContent();
    method public android.os.Bundle getAssistData();
    method public android.app.assist.AssistStructure getAssistStructure();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.service.intelligence.SnapshotData> CREATOR;
  }

}

package android.service.notification {

  public final class Adjustment implements android.os.Parcelable {
@@ -7269,7 +7280,7 @@ package android.view.accessibility {

}

package android.view.intelligence {
package android.view.contentcapture {

  public final class ContentCaptureEvent implements android.os.Parcelable {
    method public int describeContents();
@@ -7278,13 +7289,13 @@ package android.view.intelligence {
    method public android.view.autofill.AutofillId getId();
    method public java.lang.CharSequence getText();
    method public int getType();
    method public android.view.intelligence.ViewNode getViewNode();
    method public android.view.contentcapture.ViewNode getViewNode();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.intelligence.ContentCaptureEvent> CREATOR;
    field public static final int TYPE_ACTIVITY_PAUSED = 3; // 0x3
    field public static final int TYPE_ACTIVITY_RESUMED = 2; // 0x2
    field public static final int TYPE_ACTIVITY_STARTED = 1; // 0x1
    field public static final int TYPE_ACTIVITY_STOPPED = 4; // 0x4
    field public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> CREATOR;
    field public static final deprecated int TYPE_ACTIVITY_PAUSED = 3; // 0x3
    field public static final deprecated int TYPE_ACTIVITY_RESUMED = 2; // 0x2
    field public static final deprecated int TYPE_ACTIVITY_STARTED = 1; // 0x1
    field public static final deprecated int TYPE_ACTIVITY_STOPPED = 4; // 0x4
    field public static final int TYPE_VIEW_APPEARED = 5; // 0x5
    field public static final int TYPE_VIEW_DISAPPEARED = 6; // 0x6
    field public static final int TYPE_VIEW_TEXT_CHANGED = 7; // 0x7
+2 −2
Original line number Diff line number Diff line
@@ -121,8 +121,8 @@ import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillManager.AutofillClient;
import android.view.autofill.AutofillPopupWindow;
import android.view.autofill.IAutofillWindowPresenter;
import android.view.intelligence.ContentCaptureEvent;
import android.view.intelligence.ContentCaptureManager;
import android.view.contentcapture.ContentCaptureEvent;
import android.view.contentcapture.ContentCaptureManager;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.Toolbar;
+3 −3
Original line number Diff line number Diff line
@@ -165,9 +165,9 @@ import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.CaptioningManager;
import android.view.autofill.AutofillManager;
import android.view.autofill.IAutoFillManager;
import android.view.contentcapture.ContentCaptureManager;
import android.view.contentcapture.IContentCaptureManager;
import android.view.inputmethod.InputMethodManager;
import android.view.intelligence.ContentCaptureManager;
import android.view.intelligence.IIntelligenceManager;
import android.view.textclassifier.TextClassificationManager;
import android.view.textservice.TextServicesManager;

@@ -1070,7 +1070,7 @@ final class SystemServiceRegistry {
                if (outerContext.isContentCaptureSupported()) {
                    IBinder b = ServiceManager
                            .getService(Context.CONTENT_CAPTURE_MANAGER_SERVICE);
                    IIntelligenceManager service = IIntelligenceManager.Stub.asInterface(b);
                    IContentCaptureManager service = IContentCaptureManager.Stub.asInterface(b);
                    return new ContentCaptureManager(outerContext, service);
                }
                return null;
Loading