Loading core/java/android/content/Context.java +9 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,7 @@ public abstract class Context { BIND_IMPORTANT, BIND_ADJUST_WITH_ACTIVITY, BIND_NOT_PERCEPTIBLE, BIND_DENY_ACTIVITY_STARTS, BIND_INCLUDE_CAPABILITIES }) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -370,6 +371,14 @@ public abstract class Context { /*********** Public flags above this line ***********/ /*********** Hidden flags below this line ***********/ /** * Flag for {@link #bindService}: If binding from an app that is visible, the bound service is * allowed to start an activity from background. Add a flag so that this behavior can be opted * out. * @hide */ public static final int BIND_DENY_ACTIVITY_STARTS = 0X000004000; /** * Flag for {@link #bindService}: This flag is only intended to be used by the system to * indicate that a service binding is not considered as real package component usage and should Loading core/proto/android/server/activitymanagerservice.proto +1 −0 Original line number Diff line number Diff line Loading @@ -524,6 +524,7 @@ message ConnectionRecordProto { DEAD = 15; NOT_PERCEPTIBLE = 16; INCLUDE_CAPABILITIES = 17; DENY_ACTIVITY_STARTS = 18; } repeated Flag flags = 3; optional string service_name = 4; Loading services/core/java/com/android/server/am/ConnectionRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ final class ConnectionRecord { Context.BIND_NOT_VISIBLE, Context.BIND_NOT_PERCEPTIBLE, Context.BIND_INCLUDE_CAPABILITIES, Context.BIND_DENY_ACTIVITY_STARTS, }; private static final int[] BIND_PROTO_ENUMS = new int[] { ConnectionRecordProto.AUTO_CREATE, Loading @@ -87,6 +88,7 @@ final class ConnectionRecord { ConnectionRecordProto.NOT_VISIBLE, ConnectionRecordProto.NOT_PERCEPTIBLE, ConnectionRecordProto.INCLUDE_CAPABILITIES, ConnectionRecordProto.DENY_ACTIVITY_STARTS, }; void dump(PrintWriter pw, String prefix) { Loading Loading @@ -226,6 +228,9 @@ final class ConnectionRecord { if ((flags & Context.BIND_NOT_PERCEPTIBLE) != 0) { sb.append("!PRCP "); } if ((flags & Context.BIND_DENY_ACTIVITY_STARTS) != 0) { sb.append("BALFD "); } if ((flags & Context.BIND_INCLUDE_CAPABILITIES) != 0) { sb.append("CAPS "); } Loading services/core/java/com/android/server/am/ProcessServiceRecord.java +15 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import com.android.internal.annotations.GuardedBy; import com.android.server.wm.WindowProcessController; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -323,19 +324,21 @@ final class ProcessServiceRecord { return mConnections.size(); } void addBoundClientUid(int clientUid) { void addBoundClientUid(int clientUid, String clientPackageName, int bindFlags) { mBoundClientUids.add(clientUid); mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); mApp.getWindowProcessController() .addBoundClientUid(clientUid, clientPackageName, bindFlags); } void updateBoundClientUids() { if (mServices.isEmpty()) { clearBoundClientUids(); if (mServices.isEmpty()) { return; } // grab a set of clientUids of all mConnections of all services final ArraySet<Integer> boundClientUids = new ArraySet<>(); final int serviceCount = mServices.size(); WindowProcessController controller = mApp.getWindowProcessController(); for (int j = 0; j < serviceCount; j++) { final ArrayMap<IBinder, ArrayList<ConnectionRecord>> conns = mServices.valueAt(j).getConnections(); Loading @@ -343,12 +346,13 @@ final class ProcessServiceRecord { for (int conni = 0; conni < size; conni++) { ArrayList<ConnectionRecord> c = conns.valueAt(conni); for (int i = 0; i < c.size(); i++) { boundClientUids.add(c.get(i).clientUid); ConnectionRecord cr = c.get(i); boundClientUids.add(cr.clientUid); controller.addBoundClientUid(cr.clientUid, cr.clientPackageName, cr.flags); } } } mBoundClientUids = boundClientUids; mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); } void addBoundClientUidsOfNewService(ServiceRecord sr) { Loading @@ -359,15 +363,18 @@ final class ProcessServiceRecord { for (int conni = conns.size() - 1; conni >= 0; conni--) { ArrayList<ConnectionRecord> c = conns.valueAt(conni); for (int i = 0; i < c.size(); i++) { mBoundClientUids.add(c.get(i).clientUid); ConnectionRecord cr = c.get(i); mBoundClientUids.add(cr.clientUid); mApp.getWindowProcessController() .addBoundClientUid(cr.clientUid, cr.clientPackageName, cr.flags); } } mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); } void clearBoundClientUids() { mBoundClientUids.clear(); mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); mApp.getWindowProcessController().clearBoundClientUids(); } @GuardedBy("mService") Loading services/core/java/com/android/server/am/ServiceRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -683,7 +683,7 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN // if we have a process attached, add bound client uid of this connection to it if (app != null) { app.mServices.addBoundClientUid(c.clientUid); app.mServices.addBoundClientUid(c.clientUid, c.clientPackageName, c.flags); } } Loading Loading
core/java/android/content/Context.java +9 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,7 @@ public abstract class Context { BIND_IMPORTANT, BIND_ADJUST_WITH_ACTIVITY, BIND_NOT_PERCEPTIBLE, BIND_DENY_ACTIVITY_STARTS, BIND_INCLUDE_CAPABILITIES }) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -370,6 +371,14 @@ public abstract class Context { /*********** Public flags above this line ***********/ /*********** Hidden flags below this line ***********/ /** * Flag for {@link #bindService}: If binding from an app that is visible, the bound service is * allowed to start an activity from background. Add a flag so that this behavior can be opted * out. * @hide */ public static final int BIND_DENY_ACTIVITY_STARTS = 0X000004000; /** * Flag for {@link #bindService}: This flag is only intended to be used by the system to * indicate that a service binding is not considered as real package component usage and should Loading
core/proto/android/server/activitymanagerservice.proto +1 −0 Original line number Diff line number Diff line Loading @@ -524,6 +524,7 @@ message ConnectionRecordProto { DEAD = 15; NOT_PERCEPTIBLE = 16; INCLUDE_CAPABILITIES = 17; DENY_ACTIVITY_STARTS = 18; } repeated Flag flags = 3; optional string service_name = 4; Loading
services/core/java/com/android/server/am/ConnectionRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ final class ConnectionRecord { Context.BIND_NOT_VISIBLE, Context.BIND_NOT_PERCEPTIBLE, Context.BIND_INCLUDE_CAPABILITIES, Context.BIND_DENY_ACTIVITY_STARTS, }; private static final int[] BIND_PROTO_ENUMS = new int[] { ConnectionRecordProto.AUTO_CREATE, Loading @@ -87,6 +88,7 @@ final class ConnectionRecord { ConnectionRecordProto.NOT_VISIBLE, ConnectionRecordProto.NOT_PERCEPTIBLE, ConnectionRecordProto.INCLUDE_CAPABILITIES, ConnectionRecordProto.DENY_ACTIVITY_STARTS, }; void dump(PrintWriter pw, String prefix) { Loading Loading @@ -226,6 +228,9 @@ final class ConnectionRecord { if ((flags & Context.BIND_NOT_PERCEPTIBLE) != 0) { sb.append("!PRCP "); } if ((flags & Context.BIND_DENY_ACTIVITY_STARTS) != 0) { sb.append("BALFD "); } if ((flags & Context.BIND_INCLUDE_CAPABILITIES) != 0) { sb.append("CAPS "); } Loading
services/core/java/com/android/server/am/ProcessServiceRecord.java +15 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.util.ArrayMap; import android.util.ArraySet; import com.android.internal.annotations.GuardedBy; import com.android.server.wm.WindowProcessController; import java.io.PrintWriter; import java.util.ArrayList; Loading Loading @@ -323,19 +324,21 @@ final class ProcessServiceRecord { return mConnections.size(); } void addBoundClientUid(int clientUid) { void addBoundClientUid(int clientUid, String clientPackageName, int bindFlags) { mBoundClientUids.add(clientUid); mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); mApp.getWindowProcessController() .addBoundClientUid(clientUid, clientPackageName, bindFlags); } void updateBoundClientUids() { if (mServices.isEmpty()) { clearBoundClientUids(); if (mServices.isEmpty()) { return; } // grab a set of clientUids of all mConnections of all services final ArraySet<Integer> boundClientUids = new ArraySet<>(); final int serviceCount = mServices.size(); WindowProcessController controller = mApp.getWindowProcessController(); for (int j = 0; j < serviceCount; j++) { final ArrayMap<IBinder, ArrayList<ConnectionRecord>> conns = mServices.valueAt(j).getConnections(); Loading @@ -343,12 +346,13 @@ final class ProcessServiceRecord { for (int conni = 0; conni < size; conni++) { ArrayList<ConnectionRecord> c = conns.valueAt(conni); for (int i = 0; i < c.size(); i++) { boundClientUids.add(c.get(i).clientUid); ConnectionRecord cr = c.get(i); boundClientUids.add(cr.clientUid); controller.addBoundClientUid(cr.clientUid, cr.clientPackageName, cr.flags); } } } mBoundClientUids = boundClientUids; mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); } void addBoundClientUidsOfNewService(ServiceRecord sr) { Loading @@ -359,15 +363,18 @@ final class ProcessServiceRecord { for (int conni = conns.size() - 1; conni >= 0; conni--) { ArrayList<ConnectionRecord> c = conns.valueAt(conni); for (int i = 0; i < c.size(); i++) { mBoundClientUids.add(c.get(i).clientUid); ConnectionRecord cr = c.get(i); mBoundClientUids.add(cr.clientUid); mApp.getWindowProcessController() .addBoundClientUid(cr.clientUid, cr.clientPackageName, cr.flags); } } mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); } void clearBoundClientUids() { mBoundClientUids.clear(); mApp.getWindowProcessController().setBoundClientUids(mBoundClientUids); mApp.getWindowProcessController().clearBoundClientUids(); } @GuardedBy("mService") Loading
services/core/java/com/android/server/am/ServiceRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -683,7 +683,7 @@ final class ServiceRecord extends Binder implements ComponentName.WithComponentN // if we have a process attached, add bound client uid of this connection to it if (app != null) { app.mServices.addBoundClientUid(c.clientUid); app.mServices.addBoundClientUid(c.clientUid, c.clientPackageName, c.flags); } } Loading