Loading core/java/android/content/pm/permission/IRuntimePermissionPresenter.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -25,4 +25,5 @@ import android.os.RemoteCallback; */ oneway interface IRuntimePermissionPresenter { void getAppPermissions(String packageName, in RemoteCallback callback); void revokeRuntimePermission(String packageName, String permissionName); } core/java/android/content/pm/permission/RuntimePermissionPresenter.java +37 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading @@ -31,6 +30,7 @@ import android.os.RemoteCallback; import android.os.RemoteException; import android.permissionpresenterservice.RuntimePermissionPresenterService; import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.SomeArgs; Loading Loading @@ -118,6 +118,22 @@ public final class RuntimePermissionPresenter { mRemoteService.processMessage(message); } /** * Revoke the permission {@code permissionName} for app {@code packageName} * * @param packageName The package for which to revoke * @param permissionName The permission to revoke */ public void revokeRuntimePermission(String packageName, String permissionName) { SomeArgs args = SomeArgs.obtain(); args.arg1 = packageName; args.arg2 = permissionName; Message message = mRemoteService.obtainMessage( RemoteService.MSG_REVOKE_APP_PERMISSIONS, args); mRemoteService.processMessage(message); } private static final class RemoteService extends Handler implements ServiceConnection { private static final long UNBIND_TIMEOUT_MILLIS = 10000; Loading @@ -125,6 +141,7 @@ public final class RuntimePermissionPresenter { public static final int MSG_GET_APP_PERMISSIONS = 1; public static final int MSG_GET_APPS_USING_PERMISSIONS = 2; public static final int MSG_UNBIND = 3; public static final int MSG_REVOKE_APP_PERMISSIONS = 4; private final Object mLock = new Object(); Loading Loading @@ -231,6 +248,25 @@ public final class RuntimePermissionPresenter { mRemoteInstance = null; } } break; case MSG_REVOKE_APP_PERMISSIONS: { SomeArgs args = (SomeArgs) msg.obj; final String packageName = (String) args.arg1; final String permissionName = (String) args.arg2; args.recycle(); final IRuntimePermissionPresenter remoteInstance; synchronized (mLock) { remoteInstance = mRemoteInstance; } if (remoteInstance == null) { return; } try { remoteInstance.revokeRuntimePermission(packageName, permissionName); } catch (RemoteException re) { Log.e(TAG, "Error getting app permissions", re); } } break; } synchronized (mLock) { Loading core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java +29 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.annotation.SystemApi; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.permission.IRuntimePermissionPresenter; import android.content.pm.permission.RuntimePermissionPresentationInfo; import android.content.pm.permission.RuntimePermissionPresenter; Loading @@ -30,6 +29,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteCallback; import com.android.internal.os.SomeArgs; import java.util.List; Loading Loading @@ -72,6 +72,16 @@ public abstract class RuntimePermissionPresenterService extends Service { */ public abstract List<RuntimePermissionPresentationInfo> onGetAppPermissions(String packageName); /** * Revoke the permission {@code permissionName} for app {@code packageName} * * @param packageName The package for which to revoke * @param permissionName The permission to revoke * * @hide */ public abstract void onRevokeRuntimePermission(String packageName, String permissionName); @Override public final IBinder onBind(Intent intent) { return new IRuntimePermissionPresenter.Stub() { Loading @@ -83,12 +93,22 @@ public abstract class RuntimePermissionPresenterService extends Service { mHandler.obtainMessage(MyHandler.MSG_GET_APP_PERMISSIONS, args).sendToTarget(); } @Override public void revokeRuntimePermission(String packageName, String permissionName) { SomeArgs args = SomeArgs.obtain(); args.arg1 = packageName; args.arg2 = permissionName; mHandler.obtainMessage(MyHandler.MSG_REVOKE_APP_PERMISSION, args).sendToTarget(); } }; } private final class MyHandler extends Handler { public static final int MSG_GET_APP_PERMISSIONS = 1; public static final int MSG_GET_APPS_USING_PERMISSIONS = 2; public static final int MSG_REVOKE_APP_PERMISSION = 3; public MyHandler(Looper looper) { super(looper, null, false); Loading @@ -113,6 +133,14 @@ public abstract class RuntimePermissionPresenterService extends Service { callback.sendResult(null); } } break; case MSG_REVOKE_APP_PERMISSION: { SomeArgs args = (SomeArgs) msg.obj; String packageName = (String) args.arg1; String permissionName = (String) args.arg2; args.recycle(); onRevokeRuntimePermission(packageName, permissionName); } break; } } } Loading Loading
core/java/android/content/pm/permission/IRuntimePermissionPresenter.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -25,4 +25,5 @@ import android.os.RemoteCallback; */ oneway interface IRuntimePermissionPresenter { void getAppPermissions(String packageName, in RemoteCallback callback); void revokeRuntimePermission(String packageName, String permissionName); }
core/java/android/content/pm/permission/RuntimePermissionPresenter.java +37 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading @@ -31,6 +30,7 @@ import android.os.RemoteCallback; import android.os.RemoteException; import android.permissionpresenterservice.RuntimePermissionPresenterService; import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.SomeArgs; Loading Loading @@ -118,6 +118,22 @@ public final class RuntimePermissionPresenter { mRemoteService.processMessage(message); } /** * Revoke the permission {@code permissionName} for app {@code packageName} * * @param packageName The package for which to revoke * @param permissionName The permission to revoke */ public void revokeRuntimePermission(String packageName, String permissionName) { SomeArgs args = SomeArgs.obtain(); args.arg1 = packageName; args.arg2 = permissionName; Message message = mRemoteService.obtainMessage( RemoteService.MSG_REVOKE_APP_PERMISSIONS, args); mRemoteService.processMessage(message); } private static final class RemoteService extends Handler implements ServiceConnection { private static final long UNBIND_TIMEOUT_MILLIS = 10000; Loading @@ -125,6 +141,7 @@ public final class RuntimePermissionPresenter { public static final int MSG_GET_APP_PERMISSIONS = 1; public static final int MSG_GET_APPS_USING_PERMISSIONS = 2; public static final int MSG_UNBIND = 3; public static final int MSG_REVOKE_APP_PERMISSIONS = 4; private final Object mLock = new Object(); Loading Loading @@ -231,6 +248,25 @@ public final class RuntimePermissionPresenter { mRemoteInstance = null; } } break; case MSG_REVOKE_APP_PERMISSIONS: { SomeArgs args = (SomeArgs) msg.obj; final String packageName = (String) args.arg1; final String permissionName = (String) args.arg2; args.recycle(); final IRuntimePermissionPresenter remoteInstance; synchronized (mLock) { remoteInstance = mRemoteInstance; } if (remoteInstance == null) { return; } try { remoteInstance.revokeRuntimePermission(packageName, permissionName); } catch (RemoteException re) { Log.e(TAG, "Error getting app permissions", re); } } break; } synchronized (mLock) { Loading
core/java/android/permissionpresenterservice/RuntimePermissionPresenterService.java +29 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.annotation.SystemApi; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.permission.IRuntimePermissionPresenter; import android.content.pm.permission.RuntimePermissionPresentationInfo; import android.content.pm.permission.RuntimePermissionPresenter; Loading @@ -30,6 +29,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteCallback; import com.android.internal.os.SomeArgs; import java.util.List; Loading Loading @@ -72,6 +72,16 @@ public abstract class RuntimePermissionPresenterService extends Service { */ public abstract List<RuntimePermissionPresentationInfo> onGetAppPermissions(String packageName); /** * Revoke the permission {@code permissionName} for app {@code packageName} * * @param packageName The package for which to revoke * @param permissionName The permission to revoke * * @hide */ public abstract void onRevokeRuntimePermission(String packageName, String permissionName); @Override public final IBinder onBind(Intent intent) { return new IRuntimePermissionPresenter.Stub() { Loading @@ -83,12 +93,22 @@ public abstract class RuntimePermissionPresenterService extends Service { mHandler.obtainMessage(MyHandler.MSG_GET_APP_PERMISSIONS, args).sendToTarget(); } @Override public void revokeRuntimePermission(String packageName, String permissionName) { SomeArgs args = SomeArgs.obtain(); args.arg1 = packageName; args.arg2 = permissionName; mHandler.obtainMessage(MyHandler.MSG_REVOKE_APP_PERMISSION, args).sendToTarget(); } }; } private final class MyHandler extends Handler { public static final int MSG_GET_APP_PERMISSIONS = 1; public static final int MSG_GET_APPS_USING_PERMISSIONS = 2; public static final int MSG_REVOKE_APP_PERMISSION = 3; public MyHandler(Looper looper) { super(looper, null, false); Loading @@ -113,6 +133,14 @@ public abstract class RuntimePermissionPresenterService extends Service { callback.sendResult(null); } } break; case MSG_REVOKE_APP_PERMISSION: { SomeArgs args = (SomeArgs) msg.obj; String packageName = (String) args.arg1; String permissionName = (String) args.arg2; args.recycle(); onRevokeRuntimePermission(packageName, permissionName); } break; } } } Loading