Merge "Notify Admin When DISALLOW_CELLULAR_2G Is Not Supported By Device" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0a81523fff
@@ -16,10 +16,11 @@
|
||||
|
||||
package com.android.server.devicepolicy;
|
||||
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_FAILURE_CONFLICTING_ADMIN_POLICY;
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_POLICY_CLEARED;
|
||||
import static android.app.admin.PolicyUpdateReceiver.EXTRA_POLICY_TARGET_USER_ID;
|
||||
import static android.app.admin.PolicyUpdateReceiver.EXTRA_POLICY_UPDATE_RESULT_KEY;
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_FAILURE_CONFLICTING_ADMIN_POLICY;
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_FAILURE_HARDWARE_LIMITATION;
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_POLICY_CLEARED;
|
||||
import static android.app.admin.PolicyUpdateResult.RESULT_POLICY_SET;
|
||||
import static android.content.pm.UserProperties.INHERIT_DEVICE_POLICY_FROM_PARENT;
|
||||
import static android.provider.DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER;
|
||||
@@ -27,6 +28,7 @@ import static android.provider.DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER;
|
||||
import android.Manifest;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.admin.DevicePolicyIdentifiers;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.DevicePolicyState;
|
||||
import android.app.admin.PolicyKey;
|
||||
@@ -46,6 +48,7 @@ import android.os.Environment;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.AtomicFile;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
@@ -79,6 +82,10 @@ import java.util.Set;
|
||||
final class DevicePolicyEngine {
|
||||
static final String TAG = "DevicePolicyEngine";
|
||||
|
||||
private static final String CELLULAR_2G_USER_RESTRICTION_ID =
|
||||
DevicePolicyIdentifiers.getIdentifierForUserRestriction(
|
||||
UserManager.DISALLOW_CELLULAR_2G);
|
||||
|
||||
private static final String ENABLE_COEXISTENCE_FLAG = "enable_coexistence";
|
||||
private static final boolean DEFAULT_ENABLE_COEXISTENCE_FLAG = true;
|
||||
|
||||
@@ -380,6 +387,15 @@ final class DevicePolicyEngine {
|
||||
Objects.requireNonNull(value);
|
||||
|
||||
synchronized (mLock) {
|
||||
// TODO(b/270999567): Move error handling for DISALLOW_CELLULAR_2G into the code
|
||||
// that honors the restriction once there's an API available
|
||||
if (checkFor2gFailure(policyDefinition, enforcingAdmin)) {
|
||||
Log.i(TAG,
|
||||
"Device does not support capabilities required to disable 2g. Not setting"
|
||||
+ " global policy state.");
|
||||
return;
|
||||
}
|
||||
|
||||
PolicyState<V> globalPolicyState = getGlobalPolicyStateLocked(policyDefinition);
|
||||
|
||||
boolean policyChanged = globalPolicyState.addPolicy(enforcingAdmin, value);
|
||||
@@ -1162,6 +1178,36 @@ final class DevicePolicyEngine {
|
||||
DEFAULT_ENABLE_COEXISTENCE_FLAG);
|
||||
}
|
||||
|
||||
private <V> boolean checkFor2gFailure(@NonNull PolicyDefinition<V> policyDefinition,
|
||||
@NonNull EnforcingAdmin enforcingAdmin) {
|
||||
if (!policyDefinition.getPolicyKey().getIdentifier().equals(
|
||||
CELLULAR_2G_USER_RESTRICTION_ID)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isCapabilitySupported;
|
||||
try {
|
||||
isCapabilitySupported = mContext.getSystemService(
|
||||
TelephonyManager.class).isRadioInterfaceCapabilitySupported(
|
||||
TelephonyManager.CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK);
|
||||
} catch (IllegalStateException e) {
|
||||
// isRadioInterfaceCapabilitySupported can throw if there is no Telephony
|
||||
// service initialized.
|
||||
isCapabilitySupported = false;
|
||||
}
|
||||
|
||||
if (!isCapabilitySupported) {
|
||||
sendPolicyResultToAdmin(
|
||||
enforcingAdmin,
|
||||
policyDefinition,
|
||||
RESULT_FAILURE_HARDWARE_LIMITATION,
|
||||
UserHandle.USER_ALL);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private class DevicePoliciesReaderWriter {
|
||||
private static final String DEVICE_POLICIES_XML = "device_policy_state.xml";
|
||||
private static final String TAG_LOCAL_POLICY_ENTRY = "local-policy-entry";
|
||||
@@ -1316,8 +1362,8 @@ final class DevicePolicyEngine {
|
||||
if (adminsPolicy != null) {
|
||||
mLocalPolicies.get(userId).put(policyKey, adminsPolicy);
|
||||
} else {
|
||||
Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an "
|
||||
+ "AdminsPolicy.");
|
||||
Log.e(TAG,
|
||||
"Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1328,8 +1374,8 @@ final class DevicePolicyEngine {
|
||||
if (adminsPolicy != null) {
|
||||
mGlobalPolicies.put(policyKey, adminsPolicy);
|
||||
} else {
|
||||
Log.e(TAG, "Error parsing file, " + policyKey + "doesn't have an "
|
||||
+ "AdminsPolicy.");
|
||||
Log.e(TAG,
|
||||
"Error parsing file, " + policyKey + "doesn't have an " + "AdminsPolicy.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user