Remove FDE support from accessibility settings

With FDE (Full Disk Encryption), secure start-up (i.e. requiring a PIN /
pattern / password to boot the device) was incompatible with
accessibility services.  Thus, the accessibility settings would ask the
user to disable secure start-up when enabling an accessibility service.

Now that FDE support has been removed in favor of FBE (File Based
Encryption), this is no longer necessary.  Remove it.

Bug: 208476087
Change-Id: I5f6e512f223df63e1b4d1c181fc8b3fe683dcd5f
This commit is contained in:
Eric Biggers
2022-01-11 17:01:22 -08:00
parent 6552bdd0ef
commit b4060ef65b
5 changed files with 4 additions and 149 deletions

View File

@@ -21,9 +21,7 @@ import static com.android.settings.accessibility.AccessibilityStatsLogUtils.logA
import static com.android.settings.accessibility.PreferredShortcuts.retrieveUserShortcutType;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Activity;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -39,9 +37,6 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
@@ -52,11 +47,9 @@ import android.widget.Switch;
import androidx.annotation.Nullable;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settingslib.accessibility.AccessibilityUtils;
import java.util.List;
@@ -67,9 +60,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
ToggleFeaturePreferenceFragment {
private static final String TAG = "ToggleAccessibilityServicePreferenceFragment";
private static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION = 1;
private static final String KEY_HAS_LOGGED = "has_logged";
private LockPatternUtils mLockPatternUtils;
private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false);
private static final String EMPTY_STRING = "";
@@ -110,7 +101,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getPrefContext());
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(KEY_HAS_LOGGED)) {
mDisabledStateLogged = savedInstanceState.getBoolean(KEY_HAS_LOGGED);
@@ -263,33 +253,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends
.contains(mComponentName);
}
/**
* Return whether the device is encrypted with legacy full disk encryption. Newer devices
* should be using File Based Encryption.
*
* @return true if device is encrypted
*/
private boolean isFullDiskEncrypted() {
return StorageManager.isNonDefaultBlockEncrypted();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION) {
if (resultCode == Activity.RESULT_OK) {
handleConfirmServiceEnabled(/* confirmed= */ true);
// The user confirmed that they accept weaker encryption when
// enabling the accessibility service, so change encryption.
// Since we came here asynchronously, check encryption again.
if (isFullDiskEncrypted()) {
mLockPatternUtils.clearEncryptionPassword();
Settings.Global.putInt(getContentResolver(),
Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, 0);
}
} else {
handleConfirmServiceEnabled(/* confirmed= */ false);
}
}
}
private void registerPackageRemoveReceiver() {
@@ -341,23 +306,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends
onPreferenceToggled(mPreferenceKey, confirmed);
}
private String createConfirmCredentialReasonMessage() {
int resId = R.string.enable_service_password_reason;
switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: {
resId = R.string.enable_service_pattern_reason;
}
break;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: {
resId = R.string.enable_service_pin_reason;
}
break;
}
return getString(resId, getAccessibilityServiceInfo().getResolveInfo()
.loadLabel(getPackageManager()));
}
@Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
if (isChecked != isAccessibilityServiceEnabled()) {
@@ -483,20 +431,11 @@ public class ToggleAccessibilityServicePreferenceFragment extends
}
private void onAllowButtonFromEnableToggleClicked() {
if (isFullDiskEncrypted()) {
final String title = createConfirmCredentialReasonMessage();
final Intent intent = ConfirmDeviceCredentialActivity.createIntent(title, /* details= */
null);
startActivityForResult(intent,
ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION);
} else {
handleConfirmServiceEnabled(/* confirmed= */ true);
if (isServiceSupportAccessibilityButton()) {
mIsDialogShown.set(false);
showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
}
handleConfirmServiceEnabled(/* confirmed= */ true);
if (isServiceSupportAccessibilityButton()) {
mIsDialogShown.set(false);
showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
}
mDialog.dismiss();
}