Add read/write logic for SubscriptionPlan network types field
Add permissions for Phone process to access SubscriptionPlans for meteredness Test: manual verification Bug: 169187737 Change-Id: Ib821590a573db87b22619cfe7ebe64c0230c5031
This commit is contained in:
@@ -164,6 +164,7 @@ applications that come with the platform
|
|||||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||||
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
|
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
|
||||||
<permission name="android.permission.MANAGE_USERS"/>
|
<permission name="android.permission.MANAGE_USERS"/>
|
||||||
|
<permission name="android.permission.MANAGE_SUBSCRIPTION_PLANS" />
|
||||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||||
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
|
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
|
||||||
<permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
|
<permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
|
||||||
|
|||||||
@@ -96,7 +96,9 @@ import static com.android.internal.util.XmlUtils.readBooleanAttribute;
|
|||||||
import static com.android.internal.util.XmlUtils.readIntAttribute;
|
import static com.android.internal.util.XmlUtils.readIntAttribute;
|
||||||
import static com.android.internal.util.XmlUtils.readLongAttribute;
|
import static com.android.internal.util.XmlUtils.readLongAttribute;
|
||||||
import static com.android.internal.util.XmlUtils.readStringAttribute;
|
import static com.android.internal.util.XmlUtils.readStringAttribute;
|
||||||
|
import static com.android.internal.util.XmlUtils.readThisIntArrayXml;
|
||||||
import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
|
import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
|
||||||
|
import static com.android.internal.util.XmlUtils.writeIntArrayXml;
|
||||||
import static com.android.internal.util.XmlUtils.writeIntAttribute;
|
import static com.android.internal.util.XmlUtils.writeIntAttribute;
|
||||||
import static com.android.internal.util.XmlUtils.writeLongAttribute;
|
import static com.android.internal.util.XmlUtils.writeLongAttribute;
|
||||||
import static com.android.internal.util.XmlUtils.writeStringAttribute;
|
import static com.android.internal.util.XmlUtils.writeStringAttribute;
|
||||||
@@ -229,6 +231,7 @@ import com.android.internal.util.DumpUtils;
|
|||||||
import com.android.internal.util.FastXmlSerializer;
|
import com.android.internal.util.FastXmlSerializer;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
import com.android.internal.util.IndentingPrintWriter;
|
||||||
import com.android.internal.util.StatLogger;
|
import com.android.internal.util.StatLogger;
|
||||||
|
import com.android.internal.util.XmlUtils;
|
||||||
import com.android.server.EventLogTags;
|
import com.android.server.EventLogTags;
|
||||||
import com.android.server.LocalServices;
|
import com.android.server.LocalServices;
|
||||||
import com.android.server.ServiceThread;
|
import com.android.server.ServiceThread;
|
||||||
@@ -239,6 +242,7 @@ import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
|||||||
import libcore.io.IoUtils;
|
import libcore.io.IoUtils;
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -313,7 +317,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
private static final int VERSION_ADDED_NETWORK_ID = 9;
|
private static final int VERSION_ADDED_NETWORK_ID = 9;
|
||||||
private static final int VERSION_SWITCH_UID = 10;
|
private static final int VERSION_SWITCH_UID = 10;
|
||||||
private static final int VERSION_ADDED_CYCLE = 11;
|
private static final int VERSION_ADDED_CYCLE = 11;
|
||||||
private static final int VERSION_LATEST = VERSION_ADDED_CYCLE;
|
private static final int VERSION_ADDED_NETWORK_TYPES = 12;
|
||||||
|
private static final int VERSION_LATEST = VERSION_ADDED_NETWORK_TYPES;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static final int TYPE_WARNING = SystemMessage.NOTE_NET_WARNING;
|
public static final int TYPE_WARNING = SystemMessage.NOTE_NET_WARNING;
|
||||||
@@ -332,6 +337,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
private static final String TAG_WHITELIST = "whitelist";
|
private static final String TAG_WHITELIST = "whitelist";
|
||||||
private static final String TAG_RESTRICT_BACKGROUND = "restrict-background";
|
private static final String TAG_RESTRICT_BACKGROUND = "restrict-background";
|
||||||
private static final String TAG_REVOKED_RESTRICT_BACKGROUND = "revoked-restrict-background";
|
private static final String TAG_REVOKED_RESTRICT_BACKGROUND = "revoked-restrict-background";
|
||||||
|
private static final String TAG_XML_UTILS_INT_ARRAY = "int-array";
|
||||||
|
|
||||||
private static final String ATTR_VERSION = "version";
|
private static final String ATTR_VERSION = "version";
|
||||||
private static final String ATTR_RESTRICT_BACKGROUND = "restrictBackground";
|
private static final String ATTR_RESTRICT_BACKGROUND = "restrictBackground";
|
||||||
@@ -360,6 +366,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
private static final String ATTR_USAGE_BYTES = "usageBytes";
|
private static final String ATTR_USAGE_BYTES = "usageBytes";
|
||||||
private static final String ATTR_USAGE_TIME = "usageTime";
|
private static final String ATTR_USAGE_TIME = "usageTime";
|
||||||
private static final String ATTR_OWNER_PACKAGE = "ownerPackage";
|
private static final String ATTR_OWNER_PACKAGE = "ownerPackage";
|
||||||
|
private static final String ATTR_NETWORK_TYPES = "networkTypes";
|
||||||
|
private static final String ATTR_XML_UTILS_NAME = "name";
|
||||||
|
|
||||||
private static final String ACTION_ALLOW_BACKGROUND =
|
private static final String ACTION_ALLOW_BACKGROUND =
|
||||||
"com.android.server.net.action.ALLOW_BACKGROUND";
|
"com.android.server.net.action.ALLOW_BACKGROUND";
|
||||||
@@ -2311,13 +2319,25 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final int subId = readIntAttribute(in, ATTR_SUB_ID);
|
final int subId = readIntAttribute(in, ATTR_SUB_ID);
|
||||||
|
final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE);
|
||||||
|
|
||||||
|
if (version >= VERSION_ADDED_NETWORK_TYPES) {
|
||||||
|
final int depth = in.getDepth();
|
||||||
|
while (XmlUtils.nextElementWithin(in, depth)) {
|
||||||
|
if (TAG_XML_UTILS_INT_ARRAY.equals(in.getName())
|
||||||
|
&& ATTR_NETWORK_TYPES.equals(
|
||||||
|
readStringAttribute(in, ATTR_XML_UTILS_NAME))) {
|
||||||
|
final int[] networkTypes =
|
||||||
|
readThisIntArrayXml(in, TAG_XML_UTILS_INT_ARRAY, null);
|
||||||
|
builder.setNetworkTypes(networkTypes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final SubscriptionPlan plan = builder.build();
|
final SubscriptionPlan plan = builder.build();
|
||||||
mSubscriptionPlans.put(subId, ArrayUtils.appendElement(
|
mSubscriptionPlans.put(subId, ArrayUtils.appendElement(
|
||||||
SubscriptionPlan.class, mSubscriptionPlans.get(subId), plan));
|
SubscriptionPlan.class, mSubscriptionPlans.get(subId), plan));
|
||||||
|
|
||||||
final String ownerPackage = readStringAttribute(in, ATTR_OWNER_PACKAGE);
|
|
||||||
mSubscriptionPlansOwner.put(subId, ownerPackage);
|
mSubscriptionPlansOwner.put(subId, ownerPackage);
|
||||||
|
|
||||||
} else if (TAG_UID_POLICY.equals(tag)) {
|
} else if (TAG_UID_POLICY.equals(tag)) {
|
||||||
final int uid = readIntAttribute(in, ATTR_UID);
|
final int uid = readIntAttribute(in, ATTR_UID);
|
||||||
final int policy = readIntAttribute(in, ATTR_POLICY);
|
final int policy = readIntAttribute(in, ATTR_POLICY);
|
||||||
@@ -2513,6 +2533,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
writeIntAttribute(out, ATTR_LIMIT_BEHAVIOR, plan.getDataLimitBehavior());
|
writeIntAttribute(out, ATTR_LIMIT_BEHAVIOR, plan.getDataLimitBehavior());
|
||||||
writeLongAttribute(out, ATTR_USAGE_BYTES, plan.getDataUsageBytes());
|
writeLongAttribute(out, ATTR_USAGE_BYTES, plan.getDataUsageBytes());
|
||||||
writeLongAttribute(out, ATTR_USAGE_TIME, plan.getDataUsageTime());
|
writeLongAttribute(out, ATTR_USAGE_TIME, plan.getDataUsageTime());
|
||||||
|
try {
|
||||||
|
writeIntArrayXml(plan.getNetworkTypes(), ATTR_NETWORK_TYPES, out);
|
||||||
|
} catch (XmlPullParserException ignored) { }
|
||||||
out.endTag(null, TAG_SUBSCRIPTION_PLAN);
|
out.endTag(null, TAG_SUBSCRIPTION_PLAN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3310,7 +3333,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
// let in core system components (like the Settings app).
|
// let in core system components (like the Settings app).
|
||||||
final String ownerPackage = mSubscriptionPlansOwner.get(subId);
|
final String ownerPackage = mSubscriptionPlansOwner.get(subId);
|
||||||
if (Objects.equals(ownerPackage, callingPackage)
|
if (Objects.equals(ownerPackage, callingPackage)
|
||||||
|| (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID)) {
|
|| (UserHandle.getCallingAppId() == android.os.Process.SYSTEM_UID)
|
||||||
|
|| (UserHandle.getCallingAppId() == android.os.Process.PHONE_UID)) {
|
||||||
return mSubscriptionPlans.get(subId);
|
return mSubscriptionPlans.get(subId);
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "Not returning plans because caller " + callingPackage
|
Log.w(TAG, "Not returning plans because caller " + callingPackage
|
||||||
|
|||||||
Reference in New Issue
Block a user