Let self-targeting apps be able access OverlayManager
Self-targeting apps can't get an OverlayManager instance without the
system privilege. This patch makes sure that the self-targeting
application can get an OverlayManager instance via Context.
```
OverlayManager overlayManager =
context.getSystemService(OverlayManager.class);
```
In order to make the self-targeting feature compatible in the future,
this patch adds SELF_TARGETING_OVERLAY compatibility feature.
Test: atest \
OverlayHostTests \
OverlayDeviceTests \
SelfTargetingOverlayDeviceTests \
OverlayRemountedTest \
FrameworksServicesTests:com.android.server.om \
CtsContentTestCases:android.content.om.cts \
idmap2_tests
Bug: 205919743
Change-Id: Ib0b619a2a54e22d31e6c14bf700e421688b6f506
This commit is contained in:
@@ -58,6 +58,7 @@ import android.companion.CompanionDeviceManager;
|
||||
import android.companion.ICompanionDeviceManager;
|
||||
import android.companion.virtual.IVirtualDeviceManager;
|
||||
import android.companion.virtual.VirtualDeviceManager;
|
||||
import android.compat.Compatibility;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.ContentCaptureOptions;
|
||||
import android.content.Context;
|
||||
@@ -1092,7 +1093,10 @@ public final class SystemServiceRegistry {
|
||||
new CachedServiceFetcher<OverlayManager>() {
|
||||
@Override
|
||||
public OverlayManager createService(ContextImpl ctx) throws ServiceNotFoundException {
|
||||
IBinder b = ServiceManager.getServiceOrThrow(Context.OVERLAY_SERVICE);
|
||||
final IBinder b =
|
||||
(Compatibility.isChangeEnabled(OverlayManager.SELF_TARGETING_OVERLAY))
|
||||
? ServiceManager.getService(Context.OVERLAY_SERVICE)
|
||||
: ServiceManager.getServiceOrThrow(Context.OVERLAY_SERVICE);
|
||||
return new OverlayManager(ctx, IOverlayManager.Stub.asInterface(b));
|
||||
}});
|
||||
|
||||
|
||||
@@ -91,6 +91,21 @@ public class OverlayManager {
|
||||
@EnabledSince(targetSdkVersion = Build.VERSION_CODES.R)
|
||||
private static final long THROW_SECURITY_EXCEPTIONS = 147340954;
|
||||
|
||||
/**
|
||||
* Applications can use OverlayManager to create overlays to overlay on itself resources. The
|
||||
* overlay target is itself and the work range is only in caller application.
|
||||
*
|
||||
* <p>In {@link android.content.Context#getSystemService(String)}, it crashes because of {@link
|
||||
* java.lang.NullPointerException} if the parameter is OverlayManager. if the self-targeting is
|
||||
* enabled, the caller application can get the OverlayManager instance to use self-targeting
|
||||
* functionality.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@ChangeId
|
||||
@EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
|
||||
public static final long SELF_TARGETING_OVERLAY = 205919743;
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user