Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f7beed98 authored by Adnan Begovic's avatar Adnan Begovic
Browse files

admin: Restore requireSecureKeyguard interface.

Change-Id: I3c0533bafdae77df953d5bff457a4efdb94167e7
parent 2ec1a33b
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -4461,4 +4461,24 @@ public class DevicePolicyManager {
            return PERMISSION_GRANT_STATE_DEFAULT;
        }
    }

    /**
     * CM: check if secure keyguard is required
     * @hide
     */
    public boolean requireSecureKeyguard() {
        return requireSecureKeyguard(UserHandle.myUserId());
    }

    /** @hide */
    public boolean requireSecureKeyguard(int userHandle) {
        if (mService != null) {
            try {
                return mService.requireSecureKeyguard(userHandle);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed to get secure keyguard requirement");
            }
        }
        return true;
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -234,4 +234,6 @@ interface IDevicePolicyManager {
    boolean setPermissionGrantState(in ComponentName admin, String packageName,
            String permission, int grantState);
    int getPermissionGrantState(in ComponentName admin, String packageName, String permission);

    boolean requireSecureKeyguard(int userHandle);
}
+31 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ import android.security.IKeyChainAliasCallback;
import android.security.IKeyChainService;
import android.security.KeyChain;
import android.security.KeyChain.KeyChainConnection;
import android.security.KeyStore;
import android.service.persistentdata.PersistentDataBlockManager;
import android.text.TextUtils;
import android.util.Log;
@@ -4194,6 +4195,36 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        }
    }

    @Override
    public boolean requireSecureKeyguard(int userHandle) {
        if (!mHasFeature) {
            return false;
        }

        int passwordQuality = getPasswordQuality(null, userHandle);
        if (passwordQuality > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
            return true;
        }

        int encryptionStatus = getStorageEncryptionStatus(userHandle);
        if (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE
                || encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING) {
            return true;
        }

        // Keystore.isEmpty() requires system UID
        long token = Binder.clearCallingIdentity();
        try {
            if (!KeyStore.getInstance().isEmpty()) {
                return true;
            }
        } finally {
            Binder.restoreCallingIdentity(token);
        }

        return false;
    }

    // Returns the active device owner or null if there is no device owner.
    private ActiveAdmin getDeviceOwnerAdmin() {
        String deviceOwnerPackageName = getDeviceOwner();