Loading core/java/android/app/admin/IntentFilterPolicyKey.java +26 −2 Original line number Diff line number Diff line Loading @@ -28,7 +28,9 @@ import android.content.IntentFilter; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import com.android.internal.util.XmlUtils; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; Loading @@ -45,6 +47,10 @@ import java.util.Objects; */ @SystemApi public final class IntentFilterPolicyKey extends PolicyKey { private static final String TAG = "IntentFilterPolicyKey"; private static final String TAG_INTENT_FILTER_ENTRY = "filter"; private final IntentFilter mFilter; /** Loading Loading @@ -83,7 +89,9 @@ public final class IntentFilterPolicyKey extends PolicyKey { @Override public void saveToXml(TypedXmlSerializer serializer) throws IOException { serializer.attribute(/* namespace= */ null, ATTR_POLICY_IDENTIFIER, getIdentifier()); serializer.startTag(/* namespace= */ null, TAG_INTENT_FILTER_ENTRY); mFilter.writeToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_INTENT_FILTER_ENTRY); } /** Loading @@ -93,9 +101,25 @@ public final class IntentFilterPolicyKey extends PolicyKey { public IntentFilterPolicyKey readFromXml(TypedXmlPullParser parser) throws XmlPullParserException, IOException { String identifier = parser.getAttributeValue(/* namespace= */ null, ATTR_POLICY_IDENTIFIER); IntentFilter filter = readIntentFilterFromXml(parser); return new IntentFilterPolicyKey(identifier, filter); } @Nullable private IntentFilter readIntentFilterFromXml(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); if (tag.equals(TAG_INTENT_FILTER_ENTRY)) { IntentFilter filter = new IntentFilter(); filter.readFromXml(parser); return new IntentFilterPolicyKey(identifier, filter); return filter; } Log.e(TAG, "Unknown tag: " + tag); } Log.e(TAG, "Error parsing IntentFilterPolicyKey, IntentFilter not found"); return null; } /** Loading services/devicepolicy/java/com/android/server/devicepolicy/BooleanPolicySerializer.java +9 −6 Original line number Diff line number Diff line Loading @@ -32,22 +32,25 @@ import java.util.Objects; final class BooleanPolicySerializer extends PolicySerializer<Boolean> { private static final String ATTR_VALUE = "value"; private static final String TAG = "BooleanPolicySerializer"; @Override void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, String attributeName, @NonNull Boolean value) void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, @NonNull Boolean value) throws IOException { Objects.requireNonNull(value); serializer.attributeBoolean(/* namespace= */ null, attributeName, value); serializer.attributeBoolean(/* namespace= */ null, ATTR_VALUE, value); } @Nullable @Override BooleanPolicyValue readFromXml(TypedXmlPullParser parser, String attributeName) { BooleanPolicyValue readFromXml(TypedXmlPullParser parser) { try { return new BooleanPolicyValue( parser.getAttributeBoolean(/* namespace= */ null, attributeName)); parser.getAttributeBoolean(/* namespace= */ null, ATTR_VALUE)); } catch (XmlPullParserException e) { Log.e(DevicePolicyEngine.TAG, "Error parsing Boolean policy value", e); Log.e(TAG, "Error parsing Boolean policy value", e); return null; } } Loading services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java +11 −7 Original line number Diff line number Diff line Loading @@ -53,6 +53,10 @@ import java.util.Objects; // rather than in its own files. final class BundlePolicySerializer extends PolicySerializer<Bundle> { private static final String TAG = "BundlePolicySerializer"; private static final String ATTR_FILE_NAME = "file-name"; private static final String RESTRICTIONS_FILE_PREFIX = "AppRestrictions_"; private static final String XML_SUFFIX = ".xml"; Loading @@ -72,7 +76,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { @Override void saveToXml(@NonNull PolicyKey policyKey, TypedXmlSerializer serializer, String attributeName, @NonNull Bundle value) throws IOException { @NonNull Bundle value) throws IOException { Objects.requireNonNull(value); Objects.requireNonNull(policyKey); if (!(policyKey instanceof PackagePolicyKey)) { Loading @@ -82,13 +86,13 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { String packageName = ((PackagePolicyKey) policyKey).getPackageName(); String fileName = packageToRestrictionsFileName(packageName, value); writeApplicationRestrictionsLAr(fileName, value); serializer.attribute(/* namespace= */ null, attributeName, fileName); serializer.attribute(/* namespace= */ null, ATTR_FILE_NAME, fileName); } @Nullable @Override BundlePolicyValue readFromXml(TypedXmlPullParser parser, String attributeName) { String fileName = parser.getAttributeValue(/* namespace= */ null, attributeName); BundlePolicyValue readFromXml(TypedXmlPullParser parser) { String fileName = parser.getAttributeValue(/* namespace= */ null, ATTR_FILE_NAME); return new BundlePolicyValue(readApplicationRestrictions(fileName)); } Loading Loading @@ -119,7 +123,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { final TypedXmlPullParser parser = Xml.resolvePullParser(fis); XmlUtils.nextElement(parser); if (parser.getEventType() != XmlPullParser.START_TAG) { Slog.e(DevicePolicyEngine.TAG, "Unable to read restrictions file " Slog.e(TAG, "Unable to read restrictions file " + restrictionsFile.getBaseFile()); return restrictions; } Loading @@ -127,7 +131,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { readEntry(restrictions, values, parser); } } catch (IOException | XmlPullParserException e) { Slog.w(DevicePolicyEngine.TAG, "Error parsing " + restrictionsFile.getBaseFile(), e); Slog.w(TAG, "Error parsing " + restrictionsFile.getBaseFile(), e); } finally { IoUtils.closeQuietly(fis); } Loading Loading @@ -209,7 +213,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { restrictionsFile.finishWrite(fos); } catch (Exception e) { restrictionsFile.failWrite(fos); Slog.e(DevicePolicyEngine.TAG, "Error writing application restrictions list", e); Slog.e(TAG, "Error writing application restrictions list", e); } } Loading services/devicepolicy/java/com/android/server/devicepolicy/ComponentNamePolicySerializer.java +12 −11 Original line number Diff line number Diff line Loading @@ -30,30 +30,31 @@ import java.io.IOException; import java.util.Objects; final class ComponentNamePolicySerializer extends PolicySerializer<ComponentName> { private static final String ATTR_PACKAGE_NAME = ":package-name"; private static final String ATTR_CLASS_NAME = ":class-name"; private static final String TAG = "ComponentNamePolicySerializer"; private static final String ATTR_PACKAGE_NAME = "package-name"; private static final String ATTR_CLASS_NAME = "class-name"; @Override void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, String attributeNamePrefix, void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, @NonNull ComponentName value) throws IOException { Objects.requireNonNull(value); serializer.attribute( /* namespace= */ null, attributeNamePrefix + ATTR_PACKAGE_NAME, value.getPackageName()); /* namespace= */ null, ATTR_PACKAGE_NAME, value.getPackageName()); serializer.attribute( /* namespace= */ null, attributeNamePrefix + ATTR_CLASS_NAME, value.getClassName()); /* namespace= */ null, ATTR_CLASS_NAME, value.getClassName()); } @Nullable @Override ComponentNamePolicyValue readFromXml(TypedXmlPullParser parser, String attributeNamePrefix) { ComponentNamePolicyValue readFromXml(TypedXmlPullParser parser) { String packageName = parser.getAttributeValue( /* namespace= */ null, attributeNamePrefix + ATTR_PACKAGE_NAME); /* namespace= */ null, ATTR_PACKAGE_NAME); String className = parser.getAttributeValue( /* namespace= */ null, attributeNamePrefix + ATTR_CLASS_NAME); /* namespace= */ null, ATTR_CLASS_NAME); if (packageName == null || className == null) { Log.e(DevicePolicyEngine.TAG, "Error parsing ComponentName policy."); Log.e(TAG, "Error parsing ComponentName policy."); return null; } return new ComponentNamePolicyValue(new ComponentName(packageName, className)); Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +53 −34 Original line number Diff line number Diff line Loading @@ -1181,7 +1181,8 @@ final class DevicePolicyEngine { private static final String DEVICE_POLICIES_XML = "device_policy_state.xml"; private static final String TAG_LOCAL_POLICY_ENTRY = "local-policy-entry"; private static final String TAG_GLOBAL_POLICY_ENTRY = "global-policy-entry"; private static final String TAG_ADMINS_POLICY_ENTRY = "admins-policy-entry"; private static final String TAG_POLICY_STATE_ENTRY = "policy-state-entry"; private static final String TAG_POLICY_KEY_ENTRY = "policy-key-entry"; private static final String TAG_ENFORCING_ADMINS_ENTRY = "enforcing-admins-entry"; private static final String ATTR_USER_ID = "user-id"; Loading Loading @@ -1236,11 +1237,14 @@ final class DevicePolicyEngine { serializer.startTag(/* namespace= */ null, TAG_LOCAL_POLICY_ENTRY); serializer.attributeInt(/* namespace= */ null, ATTR_USER_ID, userId); serializer.startTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); policy.getKey().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); policy.getValue().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.endTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); serializer.endTag(/* namespace= */ null, TAG_LOCAL_POLICY_ENTRY); } Loading @@ -1253,11 +1257,13 @@ final class DevicePolicyEngine { for (Map.Entry<PolicyKey, PolicyState<?>> policy : mGlobalPolicies.entrySet()) { serializer.startTag(/* namespace= */ null, TAG_GLOBAL_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); policy.getKey().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); policy.getValue().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.endTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); serializer.endTag(/* namespace= */ null, TAG_GLOBAL_POLICY_ENTRY); } Loading Loading @@ -1323,28 +1329,56 @@ final class DevicePolicyEngine { private void readLocalPoliciesInner(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int userId = parser.getAttributeInt(/* namespace= */ null, ATTR_USER_ID); PolicyKey policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); PolicyKey policyKey = null; PolicyState<?> policyState = null; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); switch (tag) { case TAG_POLICY_KEY_ENTRY: policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); break; case TAG_POLICY_STATE_ENTRY: policyState = PolicyState.readFromXml(parser); break; default: Log.e(TAG, "Unknown tag for local policy entry" + tag); } } if (policyKey != null && policyState != null) { if (!mLocalPolicies.contains(userId)) { mLocalPolicies.put(userId, new HashMap<>()); } PolicyState<?> adminsPolicy = parseAdminsPolicy(parser); if (adminsPolicy != null) { mLocalPolicies.get(userId).put(policyKey, adminsPolicy); mLocalPolicies.get(userId).put(policyKey, policyState); } else { Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy."); Log.e(TAG, "Error parsing local policy"); } } private void readGlobalPoliciesInner(TypedXmlPullParser parser) throws IOException, XmlPullParserException { PolicyKey policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); PolicyState<?> adminsPolicy = parseAdminsPolicy(parser); if (adminsPolicy != null) { mGlobalPolicies.put(policyKey, adminsPolicy); PolicyKey policyKey = null; PolicyState<?> policyState = null; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); switch (tag) { case TAG_POLICY_KEY_ENTRY: policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); break; case TAG_POLICY_STATE_ENTRY: policyState = PolicyState.readFromXml(parser); break; default: Log.e(TAG, "Unknown tag for local policy entry" + tag); } } if (policyKey != null && policyState != null) { mGlobalPolicies.put(policyKey, policyState); } else { Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy."); Log.e(TAG, "Error parsing global policy"); } } Loading @@ -1356,20 +1390,5 @@ final class DevicePolicyEngine { } mEnforcingAdmins.get(admin.getUserId()).add(admin); } @Nullable private PolicyState<?> parseAdminsPolicy(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); if (tag.equals(TAG_ADMINS_POLICY_ENTRY)) { return PolicyState.readFromXml(parser); } Log.e(TAG, "Unknown tag " + tag); } Log.e(TAG, "Error parsing file, AdminsPolicy not found"); return null; } } } Loading
core/java/android/app/admin/IntentFilterPolicyKey.java +26 −2 Original line number Diff line number Diff line Loading @@ -28,7 +28,9 @@ import android.content.IntentFilter; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import com.android.internal.util.XmlUtils; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; Loading @@ -45,6 +47,10 @@ import java.util.Objects; */ @SystemApi public final class IntentFilterPolicyKey extends PolicyKey { private static final String TAG = "IntentFilterPolicyKey"; private static final String TAG_INTENT_FILTER_ENTRY = "filter"; private final IntentFilter mFilter; /** Loading Loading @@ -83,7 +89,9 @@ public final class IntentFilterPolicyKey extends PolicyKey { @Override public void saveToXml(TypedXmlSerializer serializer) throws IOException { serializer.attribute(/* namespace= */ null, ATTR_POLICY_IDENTIFIER, getIdentifier()); serializer.startTag(/* namespace= */ null, TAG_INTENT_FILTER_ENTRY); mFilter.writeToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_INTENT_FILTER_ENTRY); } /** Loading @@ -93,9 +101,25 @@ public final class IntentFilterPolicyKey extends PolicyKey { public IntentFilterPolicyKey readFromXml(TypedXmlPullParser parser) throws XmlPullParserException, IOException { String identifier = parser.getAttributeValue(/* namespace= */ null, ATTR_POLICY_IDENTIFIER); IntentFilter filter = readIntentFilterFromXml(parser); return new IntentFilterPolicyKey(identifier, filter); } @Nullable private IntentFilter readIntentFilterFromXml(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); if (tag.equals(TAG_INTENT_FILTER_ENTRY)) { IntentFilter filter = new IntentFilter(); filter.readFromXml(parser); return new IntentFilterPolicyKey(identifier, filter); return filter; } Log.e(TAG, "Unknown tag: " + tag); } Log.e(TAG, "Error parsing IntentFilterPolicyKey, IntentFilter not found"); return null; } /** Loading
services/devicepolicy/java/com/android/server/devicepolicy/BooleanPolicySerializer.java +9 −6 Original line number Diff line number Diff line Loading @@ -32,22 +32,25 @@ import java.util.Objects; final class BooleanPolicySerializer extends PolicySerializer<Boolean> { private static final String ATTR_VALUE = "value"; private static final String TAG = "BooleanPolicySerializer"; @Override void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, String attributeName, @NonNull Boolean value) void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, @NonNull Boolean value) throws IOException { Objects.requireNonNull(value); serializer.attributeBoolean(/* namespace= */ null, attributeName, value); serializer.attributeBoolean(/* namespace= */ null, ATTR_VALUE, value); } @Nullable @Override BooleanPolicyValue readFromXml(TypedXmlPullParser parser, String attributeName) { BooleanPolicyValue readFromXml(TypedXmlPullParser parser) { try { return new BooleanPolicyValue( parser.getAttributeBoolean(/* namespace= */ null, attributeName)); parser.getAttributeBoolean(/* namespace= */ null, ATTR_VALUE)); } catch (XmlPullParserException e) { Log.e(DevicePolicyEngine.TAG, "Error parsing Boolean policy value", e); Log.e(TAG, "Error parsing Boolean policy value", e); return null; } } Loading
services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java +11 −7 Original line number Diff line number Diff line Loading @@ -53,6 +53,10 @@ import java.util.Objects; // rather than in its own files. final class BundlePolicySerializer extends PolicySerializer<Bundle> { private static final String TAG = "BundlePolicySerializer"; private static final String ATTR_FILE_NAME = "file-name"; private static final String RESTRICTIONS_FILE_PREFIX = "AppRestrictions_"; private static final String XML_SUFFIX = ".xml"; Loading @@ -72,7 +76,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { @Override void saveToXml(@NonNull PolicyKey policyKey, TypedXmlSerializer serializer, String attributeName, @NonNull Bundle value) throws IOException { @NonNull Bundle value) throws IOException { Objects.requireNonNull(value); Objects.requireNonNull(policyKey); if (!(policyKey instanceof PackagePolicyKey)) { Loading @@ -82,13 +86,13 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { String packageName = ((PackagePolicyKey) policyKey).getPackageName(); String fileName = packageToRestrictionsFileName(packageName, value); writeApplicationRestrictionsLAr(fileName, value); serializer.attribute(/* namespace= */ null, attributeName, fileName); serializer.attribute(/* namespace= */ null, ATTR_FILE_NAME, fileName); } @Nullable @Override BundlePolicyValue readFromXml(TypedXmlPullParser parser, String attributeName) { String fileName = parser.getAttributeValue(/* namespace= */ null, attributeName); BundlePolicyValue readFromXml(TypedXmlPullParser parser) { String fileName = parser.getAttributeValue(/* namespace= */ null, ATTR_FILE_NAME); return new BundlePolicyValue(readApplicationRestrictions(fileName)); } Loading Loading @@ -119,7 +123,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { final TypedXmlPullParser parser = Xml.resolvePullParser(fis); XmlUtils.nextElement(parser); if (parser.getEventType() != XmlPullParser.START_TAG) { Slog.e(DevicePolicyEngine.TAG, "Unable to read restrictions file " Slog.e(TAG, "Unable to read restrictions file " + restrictionsFile.getBaseFile()); return restrictions; } Loading @@ -127,7 +131,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { readEntry(restrictions, values, parser); } } catch (IOException | XmlPullParserException e) { Slog.w(DevicePolicyEngine.TAG, "Error parsing " + restrictionsFile.getBaseFile(), e); Slog.w(TAG, "Error parsing " + restrictionsFile.getBaseFile(), e); } finally { IoUtils.closeQuietly(fis); } Loading Loading @@ -209,7 +213,7 @@ final class BundlePolicySerializer extends PolicySerializer<Bundle> { restrictionsFile.finishWrite(fos); } catch (Exception e) { restrictionsFile.failWrite(fos); Slog.e(DevicePolicyEngine.TAG, "Error writing application restrictions list", e); Slog.e(TAG, "Error writing application restrictions list", e); } } Loading
services/devicepolicy/java/com/android/server/devicepolicy/ComponentNamePolicySerializer.java +12 −11 Original line number Diff line number Diff line Loading @@ -30,30 +30,31 @@ import java.io.IOException; import java.util.Objects; final class ComponentNamePolicySerializer extends PolicySerializer<ComponentName> { private static final String ATTR_PACKAGE_NAME = ":package-name"; private static final String ATTR_CLASS_NAME = ":class-name"; private static final String TAG = "ComponentNamePolicySerializer"; private static final String ATTR_PACKAGE_NAME = "package-name"; private static final String ATTR_CLASS_NAME = "class-name"; @Override void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, String attributeNamePrefix, void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer, @NonNull ComponentName value) throws IOException { Objects.requireNonNull(value); serializer.attribute( /* namespace= */ null, attributeNamePrefix + ATTR_PACKAGE_NAME, value.getPackageName()); /* namespace= */ null, ATTR_PACKAGE_NAME, value.getPackageName()); serializer.attribute( /* namespace= */ null, attributeNamePrefix + ATTR_CLASS_NAME, value.getClassName()); /* namespace= */ null, ATTR_CLASS_NAME, value.getClassName()); } @Nullable @Override ComponentNamePolicyValue readFromXml(TypedXmlPullParser parser, String attributeNamePrefix) { ComponentNamePolicyValue readFromXml(TypedXmlPullParser parser) { String packageName = parser.getAttributeValue( /* namespace= */ null, attributeNamePrefix + ATTR_PACKAGE_NAME); /* namespace= */ null, ATTR_PACKAGE_NAME); String className = parser.getAttributeValue( /* namespace= */ null, attributeNamePrefix + ATTR_CLASS_NAME); /* namespace= */ null, ATTR_CLASS_NAME); if (packageName == null || className == null) { Log.e(DevicePolicyEngine.TAG, "Error parsing ComponentName policy."); Log.e(TAG, "Error parsing ComponentName policy."); return null; } return new ComponentNamePolicyValue(new ComponentName(packageName, className)); Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +53 −34 Original line number Diff line number Diff line Loading @@ -1181,7 +1181,8 @@ final class DevicePolicyEngine { private static final String DEVICE_POLICIES_XML = "device_policy_state.xml"; private static final String TAG_LOCAL_POLICY_ENTRY = "local-policy-entry"; private static final String TAG_GLOBAL_POLICY_ENTRY = "global-policy-entry"; private static final String TAG_ADMINS_POLICY_ENTRY = "admins-policy-entry"; private static final String TAG_POLICY_STATE_ENTRY = "policy-state-entry"; private static final String TAG_POLICY_KEY_ENTRY = "policy-key-entry"; private static final String TAG_ENFORCING_ADMINS_ENTRY = "enforcing-admins-entry"; private static final String ATTR_USER_ID = "user-id"; Loading Loading @@ -1236,11 +1237,14 @@ final class DevicePolicyEngine { serializer.startTag(/* namespace= */ null, TAG_LOCAL_POLICY_ENTRY); serializer.attributeInt(/* namespace= */ null, ATTR_USER_ID, userId); serializer.startTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); policy.getKey().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); policy.getValue().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.endTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); serializer.endTag(/* namespace= */ null, TAG_LOCAL_POLICY_ENTRY); } Loading @@ -1253,11 +1257,13 @@ final class DevicePolicyEngine { for (Map.Entry<PolicyKey, PolicyState<?>> policy : mGlobalPolicies.entrySet()) { serializer.startTag(/* namespace= */ null, TAG_GLOBAL_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); policy.getKey().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_POLICY_KEY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.startTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); policy.getValue().saveToXml(serializer); serializer.endTag(/* namespace= */ null, TAG_ADMINS_POLICY_ENTRY); serializer.endTag(/* namespace= */ null, TAG_POLICY_STATE_ENTRY); serializer.endTag(/* namespace= */ null, TAG_GLOBAL_POLICY_ENTRY); } Loading Loading @@ -1323,28 +1329,56 @@ final class DevicePolicyEngine { private void readLocalPoliciesInner(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int userId = parser.getAttributeInt(/* namespace= */ null, ATTR_USER_ID); PolicyKey policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); PolicyKey policyKey = null; PolicyState<?> policyState = null; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); switch (tag) { case TAG_POLICY_KEY_ENTRY: policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); break; case TAG_POLICY_STATE_ENTRY: policyState = PolicyState.readFromXml(parser); break; default: Log.e(TAG, "Unknown tag for local policy entry" + tag); } } if (policyKey != null && policyState != null) { if (!mLocalPolicies.contains(userId)) { mLocalPolicies.put(userId, new HashMap<>()); } PolicyState<?> adminsPolicy = parseAdminsPolicy(parser); if (adminsPolicy != null) { mLocalPolicies.get(userId).put(policyKey, adminsPolicy); mLocalPolicies.get(userId).put(policyKey, policyState); } else { Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy."); Log.e(TAG, "Error parsing local policy"); } } private void readGlobalPoliciesInner(TypedXmlPullParser parser) throws IOException, XmlPullParserException { PolicyKey policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); PolicyState<?> adminsPolicy = parseAdminsPolicy(parser); if (adminsPolicy != null) { mGlobalPolicies.put(policyKey, adminsPolicy); PolicyKey policyKey = null; PolicyState<?> policyState = null; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); switch (tag) { case TAG_POLICY_KEY_ENTRY: policyKey = PolicyDefinition.readPolicyKeyFromXml(parser); break; case TAG_POLICY_STATE_ENTRY: policyState = PolicyState.readFromXml(parser); break; default: Log.e(TAG, "Unknown tag for local policy entry" + tag); } } if (policyKey != null && policyState != null) { mGlobalPolicies.put(policyKey, policyState); } else { Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy."); Log.e(TAG, "Error parsing global policy"); } } Loading @@ -1356,20 +1390,5 @@ final class DevicePolicyEngine { } mEnforcingAdmins.get(admin.getUserId()).add(admin); } @Nullable private PolicyState<?> parseAdminsPolicy(TypedXmlPullParser parser) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { String tag = parser.getName(); if (tag.equals(TAG_ADMINS_POLICY_ENTRY)) { return PolicyState.readFromXml(parser); } Log.e(TAG, "Unknown tag " + tag); } Log.e(TAG, "Error parsing file, AdminsPolicy not found"); return null; } } }