Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -5983,6 +5983,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -6154,6 +6154,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -5999,6 +5999,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); core/java/android/app/ContextImpl.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentProvider; Loading Loading @@ -1457,8 +1458,22 @@ class ContextImpl extends Context { return bindServiceCommon(service, conn, flags, handler, user); } /** @hide */ @Override public IServiceConnection getServiceDispatcher(ServiceConnection conn, Handler handler, int flags) { return mPackageInfo.getServiceDispatcher(conn, getOuterContext(), handler, flags); } /** @hide */ @Override public IApplicationThread getIApplicationThread() { return mMainThread.getApplicationThread(); } private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags, Handler handler, UserHandle user) { // Keep this in sync with DevicePolicyManager.bindDeviceAdminServiceAsUser. IServiceConnection sd; if (conn == null) { throw new IllegalArgumentException("connection is null"); Loading Loading @@ -2141,7 +2156,8 @@ class ContextImpl extends Context { return mOuterContext; } final IBinder getActivityToken() { @Override public IBinder getActivityToken() { return mActivityToken; } Loading core/java/android/app/admin/DevicePolicyManager.java +39 −3 Original line number Diff line number Diff line Loading @@ -20,19 +20,21 @@ import android.annotation.ColorInt; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; import android.app.admin.NetworkEvent; import android.app.admin.PasswordMetrics; import android.app.IServiceConnection; import android.app.admin.SecurityLog.SecurityEvent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ParceledListSlice; Loading @@ -45,10 +47,8 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; import android.os.ServiceManager.ServiceNotFoundException; import android.provider.ContactsContract.Directory; import android.provider.Settings; import android.security.Credentials; Loading Loading @@ -6713,4 +6713,40 @@ public class DevicePolicyManager { throw re.rethrowFromSystemServer(); } } /** * Called by device owner/ profile owner in managed profile to bind the service with each other. * The service must be unexported. Note that the {@link Context} used to obtain this * {@link DevicePolicyManager} instance via {@link Context#getSystemService(Class)} will be used * to bind to the {@link android.app.Service}. * STOPSHIP (b/31952368): Update the javadoc after we policy to control which packages can talk. * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param serviceIntent Identifies the service to connect to. The Intent must specify either an * explicit component name or a package name to match an * {@link IntentFilter} published by a service. * @param conn Receives information as the service is started and stopped. This must be a * valid {@link ServiceConnection} object; it must not be {@code null}. * @param flags Operation options for the binding operation. See * {@link Context#bindService(Intent, ServiceConnection, int)}. * @param targetUser Which user to bind to. * @return If you have successfully bound to the service, {@code true} is returned; * {@code false} is returned if the connection is not made and you will not * receive the service object. * @see Context#bindService(Intent, ServiceConnection, int) */ public boolean bindDeviceAdminServiceAsUser( @NonNull ComponentName admin, Intent serviceIntent, @NonNull ServiceConnection conn, @Context.BindServiceFlags int flags, @NonNull UserHandle targetUser) { throwIfParentInstance("bindDeviceAdminServiceAsUser"); // Keep this in sync with ContextImpl.bindServiceCommon. try { final IServiceConnection sd = mContext.getServiceDispatcher(conn, null, flags); serviceIntent.prepareToLeaveProcess(mContext); return mService.bindDeviceAdminServiceAsUser(admin, mContext.getIApplicationThread(), mContext.getActivityToken(), serviceIntent, sd, flags, targetUser.getIdentifier()); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } } } Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -5983,6 +5983,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -6154,6 +6154,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -5999,6 +5999,7 @@ package android.app.admin { method public boolean addCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String); method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName); method public void addUserRestriction(android.content.ComponentName, java.lang.String); method public boolean bindDeviceAdminServiceAsUser(android.content.ComponentName, android.content.Intent, android.content.ServiceConnection, int, android.os.UserHandle); method public void clearCrossProfileIntentFilters(android.content.ComponentName); method public void clearDeviceOwnerApp(java.lang.String); method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
core/java/android/app/ContextImpl.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentProvider; Loading Loading @@ -1457,8 +1458,22 @@ class ContextImpl extends Context { return bindServiceCommon(service, conn, flags, handler, user); } /** @hide */ @Override public IServiceConnection getServiceDispatcher(ServiceConnection conn, Handler handler, int flags) { return mPackageInfo.getServiceDispatcher(conn, getOuterContext(), handler, flags); } /** @hide */ @Override public IApplicationThread getIApplicationThread() { return mMainThread.getApplicationThread(); } private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags, Handler handler, UserHandle user) { // Keep this in sync with DevicePolicyManager.bindDeviceAdminServiceAsUser. IServiceConnection sd; if (conn == null) { throw new IllegalArgumentException("connection is null"); Loading Loading @@ -2141,7 +2156,8 @@ class ContextImpl extends Context { return mOuterContext; } final IBinder getActivityToken() { @Override public IBinder getActivityToken() { return mActivityToken; } Loading
core/java/android/app/admin/DevicePolicyManager.java +39 −3 Original line number Diff line number Diff line Loading @@ -20,19 +20,21 @@ import android.annotation.ColorInt; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.app.Activity; import android.app.admin.NetworkEvent; import android.app.admin.PasswordMetrics; import android.app.IServiceConnection; import android.app.admin.SecurityLog.SecurityEvent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ParceledListSlice; Loading @@ -45,10 +47,8 @@ import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; import android.os.ServiceManager.ServiceNotFoundException; import android.provider.ContactsContract.Directory; import android.provider.Settings; import android.security.Credentials; Loading Loading @@ -6713,4 +6713,40 @@ public class DevicePolicyManager { throw re.rethrowFromSystemServer(); } } /** * Called by device owner/ profile owner in managed profile to bind the service with each other. * The service must be unexported. Note that the {@link Context} used to obtain this * {@link DevicePolicyManager} instance via {@link Context#getSystemService(Class)} will be used * to bind to the {@link android.app.Service}. * STOPSHIP (b/31952368): Update the javadoc after we policy to control which packages can talk. * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param serviceIntent Identifies the service to connect to. The Intent must specify either an * explicit component name or a package name to match an * {@link IntentFilter} published by a service. * @param conn Receives information as the service is started and stopped. This must be a * valid {@link ServiceConnection} object; it must not be {@code null}. * @param flags Operation options for the binding operation. See * {@link Context#bindService(Intent, ServiceConnection, int)}. * @param targetUser Which user to bind to. * @return If you have successfully bound to the service, {@code true} is returned; * {@code false} is returned if the connection is not made and you will not * receive the service object. * @see Context#bindService(Intent, ServiceConnection, int) */ public boolean bindDeviceAdminServiceAsUser( @NonNull ComponentName admin, Intent serviceIntent, @NonNull ServiceConnection conn, @Context.BindServiceFlags int flags, @NonNull UserHandle targetUser) { throwIfParentInstance("bindDeviceAdminServiceAsUser"); // Keep this in sync with ContextImpl.bindServiceCommon. try { final IServiceConnection sd = mContext.getServiceDispatcher(conn, null, flags); serviceIntent.prepareToLeaveProcess(mContext); return mService.bindDeviceAdminServiceAsUser(admin, mContext.getIApplicationThread(), mContext.getActivityToken(), serviceIntent, sd, flags, targetUser.getIdentifier()); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } } }