Merge "Add new DevicePolicyManager disable flags for keyguard."

This commit is contained in:
Jim Miller
2014-04-26 00:28:43 +00:00
committed by Android (Google) Code Review
3 changed files with 47 additions and 4 deletions

View File

@@ -5032,7 +5032,10 @@ package android.app.admin {
field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8
field public static final deprecated int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000

View File

@@ -33,6 +33,7 @@ import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.service.trust.TrustAgentService;
import android.util.Log;
import com.android.org.conscrypt.TrustedCertificateStore;
@@ -1267,7 +1268,8 @@ public class DevicePolicyManager {
public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0;
/**
* Disable all keyguard widgets
* Disable all keyguard widgets. Has no effect.
* @deprecated
*/
public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1 << 0;
@@ -1276,6 +1278,22 @@ public class DevicePolicyManager {
*/
public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 1 << 1;
/**
* Disable showing all notifications on secure keyguard screens (e.g. PIN/Pattern/Password)
*/
public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 1 << 2;
/**
* Only allow redacted notifications on secure keyguard screens (e.g. PIN/Pattern/Password)
*/
public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 1 << 3;
/**
* Ignore {@link TrustAgentService} state on secure keyguard screens
* (e.g. PIN/Pattern/Password).
*/
public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 1 << 4;
/**
* Disable all current and future keyguard customizations.
*/
@@ -1496,7 +1514,8 @@ public class DevicePolicyManager {
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
* @param which {@link #KEYGUARD_DISABLE_FEATURES_NONE} (default),
* {@link #KEYGUARD_DISABLE_WIDGETS_ALL}, {@link #KEYGUARD_DISABLE_SECURE_CAMERA},
* {@link #KEYGUARD_DISABLE_FEATURES_ALL}
* {@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_TRUST_AGENTS},
* {@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_FEATURES_ALL}
*/
public void setKeyguardDisabledFeatures(ComponentName admin, int which) {
if (mService != null) {

View File

@@ -215,8 +215,29 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
mUserHasTrust.put(userId, enabled);
}
private boolean isTrustDisabled(int userId) {
final DevicePolicyManager dpm =
(DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm != null) {
// TODO once UI is finalized
final boolean disabledByGlobalActions = false;
final boolean disabledBySettings = false;
// Don't allow trust agent if device is secured with a SIM PIN. This is here
// mainly because there's no other way to prompt the user to enter their SIM PIN
// once they get past the keyguard screen.
final boolean disabledBySimPin = isSimPinSecure();
final boolean disabledByDpm = (dpm.getKeyguardDisabledFeatures(null, userId)
& DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS) != 0;
return disabledByDpm || disabledByGlobalActions || disabledBySettings
|| disabledBySimPin;
}
return false;
}
public boolean getUserHasTrust(int userId) {
return mUserHasTrust.get(userId);
return !isTrustDisabled(userId) && mUserHasTrust.get(userId);
}
static class DisplayClientState {