Remove CryptKeeperSettings
FDE support has been removed in favor of FBE, so remove the FDE settings
from the "Encryption & credentials" page of the Settings app.
For now I didn't change the way the page appears on devices that don't
use FDE; as before, it still lists "Encrypt phone", followed by either
"Encrypted" or "Phone not encrypted" with no changeable settings. Note
that the strings used for this have "crypt_keeper" in their names but
aren't specific to FDE; the next CL will rename them.
Test: On Cuttlefish with and without encryption enabled, tested visiting
the "Encryption & credentials" settings.
Bug: 208476087
Change-Id: I3ce9894291ea1f1886f21980a86a92bfce38038a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1c2dfa9..cf4d033 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2872,26 +2872,6 @@
</intent-filter>
</activity>
- <activity android:name=".CryptKeeperConfirm$Blank"
- android:immersive="true"
- android:launchMode="singleTop"
- android:theme="@style/CryptKeeperBlankTheme"
- />
-
- <!-- Pseudo-activity used to provide an intent-filter entry point to encryption settings -->
- <activity android:name="Settings$CryptKeeperSettingsActivity"
- android:exported="true"
- android:label="@string/crypt_keeper_encrypt_title">
- <intent-filter android:priority="1">
- <action android:name="android.app.action.START_ENCRYPTION" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.security.CryptKeeperSettings" />
- <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
- android:value="@string/menu_key_security"/>
- </activity>
-
<activity
android:name="Settings$DataUsageSummaryActivity"
android:label="@string/data_usage_summary_title"
diff --git a/res/drawable-hdpi/encroid_progress.png b/res/drawable-hdpi/encroid_progress.png
deleted file mode 100644
index f4fb961..0000000
--- a/res/drawable-hdpi/encroid_progress.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/encroid_progress.png b/res/drawable-mdpi/encroid_progress.png
deleted file mode 100644
index e832c2a..0000000
--- a/res/drawable-mdpi/encroid_progress.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/encroid_progress.png b/res/drawable-xhdpi/encroid_progress.png
deleted file mode 100644
index ed9d10f..0000000
--- a/res/drawable-xhdpi/encroid_progress.png
+++ /dev/null
Binary files differ
diff --git a/res/layout/crypt_keeper_blank.xml b/res/layout/crypt_keeper_blank.xml
deleted file mode 100644
index 2cd9c91..0000000
--- a/res/layout/crypt_keeper_blank.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:gravity="center_vertical"
->
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:src="@drawable/encroid_progress"
- android:contentDescription="@null"
- />
-
-</LinearLayout>
diff --git a/res/layout/crypt_keeper_confirm.xml b/res/layout/crypt_keeper_confirm.xml
deleted file mode 100644
index 1b64909..0000000
--- a/res/layout/crypt_keeper_confirm.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- >
-
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_marginStart="16dp"
- android:layout_marginEnd="16dp"
- android:layout_marginTop="16dp"
- android:layout_weight="1"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/crypt_keeper_final_desc"
- />
- </ScrollView>
-
- <Button android:id="@+id/execute_encrypt"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/crypt_keeper_button_text"
- android:gravity="center" />
-
-</LinearLayout>
diff --git a/res/layout/crypt_keeper_settings.xml b/res/layout/crypt_keeper_settings.xml
deleted file mode 100644
index 6b33e00..0000000
--- a/res/layout/crypt_keeper_settings.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingStart="@dimen/preference_no_icon_padding_start"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:orientation="vertical">
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_marginTop="16dp"
- android:layout_weight="1">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/crypt_keeper_desc" />
- <TextView
- android:id="@+id/warning_low_charge"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:text="@string/crypt_keeper_low_charge_text"
- android:visibility="gone" />
- <TextView
- android:id="@+id/warning_unplugged"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:text="@string/crypt_keeper_unplugged_text"
- android:visibility="gone" />
- </LinearLayout>
- </ScrollView>
- <Button
- android:id="@+id/initiate_encrypt"
- style="@style/ActionPrimaryButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:text="@string/crypt_keeper_button_text" />
-</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5f8e814..e5b4923 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1291,54 +1291,6 @@
<!-- Summary of the preferences item to control encryption, when encryption is active -->
<string name="crypt_keeper_encrypted_summary">Encrypted</string>
- <!-- Informational text in the first confirmation screen before starting device encryption -->
- <string name="crypt_keeper_desc" product="tablet">
- You can encrypt your accounts, settings, downloaded apps and their data,
- media, and other files. After you encrypt your tablet, assuming you\u2019ve set up a screen lock
- (that is, a pattern or numeric PIN or password), you\u2019ll need to unlock the screen to decrypt
- the tablet every time you power it on. The only other way to decrypt is to perform a factory
- data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with
- a charged battery and keep your tablet plugged in throughout the process. If you interrupt it,
- you\u2019ll lose some or all of your data</string>
- <!-- Informational text in the first confirmation screen before starting device encryption -->
- <string name="crypt_keeper_desc" product="default">
- You can encrypt your accounts, settings, downloaded apps and their data,
- media, and other files. After you encrypt your phone, assuming you\u2019ve set up a screen lock
- (that is, a pattern or numeric PIN or password), you\u2019ll need to unlock the screen to decrypt
- the phone every time you power it on. The only other way to decrypt is to perform a factory
- data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with
- a charged battery and keep your phone plugged in throughout the process. If you interrupt it,
- you\u2019ll lose some or all of your data.</string>
-
- <!-- Button text to start encryption process -->
- <string name="crypt_keeper_button_text" product="tablet">Encrypt tablet</string>
- <!-- Button text to start encryption process -->
- <string name="crypt_keeper_button_text" product="default">Encrypt phone</string>
-
- <!-- Warning string that will be displayed when encryption cannot be started -->
- <string name="crypt_keeper_low_charge_text">Charge your battery and try again.</string>
- <!-- Warning string that will be displayed when encryption cannot be started -->
- <string name="crypt_keeper_unplugged_text">Plug in your charger and try again.</string>
-
- <!-- Dialog title, shown when encryption cannot proceed because a PIN/Password is needed -->
- <string name="crypt_keeper_dialog_need_password_title">No lock screen PIN or password</string>
- <!-- Dialog message, shown when encryption cannot proceed because a PIN/Password is needed -->
- <string name="crypt_keeper_dialog_need_password_message">You need to set a lock screen PIN or
- password before you can start encryption.</string>
-
- <!-- Title of the final confirmation screen before starting device encryption -->
- <string name="crypt_keeper_confirm_title">Encrypt?</string>
- <!-- Warning text in the final confirmation screen before starting device encryption -->
- <string name="crypt_keeper_final_desc" product="tablet">
- The encryption operation is irreversible and if you interrupt it, you\u2019ll lose data.
- Encryption takes an hour or more, during which the tablet will restart several times.
- </string>
- <!-- Warning text in the final confirmation screen before starting device encryption -->
- <string name="crypt_keeper_final_desc" product="default">
- The encryption operation is irreversible and if you interrupt it, you\u2019ll lose data.
- Encryption takes an hour or more, during which the phone will restart several times.
- </string>
-
<!-- Unlock Picker Settings --><skip />
<!-- Security Picker --><skip />
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 39b44b1..838d63b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -198,10 +198,6 @@
<item name="android:activityOpenExitAnimation">@anim/confirm_credential_open_exit</item>
</style>
- <style name="CryptKeeperBlankTheme" parent="@android:style/Theme.Material.NoActionBar">
- <item name="android:background">#ff000000</item>
- </style>
-
<style name="SetupWizardButton.Negative" parent="@style/SudGlifButton.Secondary">
<!-- Negative margin to offset for padding of the button itself. We want the label to be
aligned with the text above it -->
diff --git a/res/xml/encryption_and_credential.xml b/res/xml/encryption_and_credential.xml
index beaccce..b347e9f 100644
--- a/res/xml/encryption_and_credential.xml
+++ b/res/xml/encryption_and_credential.xml
@@ -26,7 +26,6 @@
<Preference
android:key="encryption_and_credentials_encryption_status"
android:title="@string/crypt_keeper_encrypt_title"
- android:fragment="com.android.settings.security.CryptKeeperSettings"
android:summary="@string/summary_placeholder"
settings:controller="com.android.settings.security.EncryptionStatusPreferenceController"/>
diff --git a/src/com/android/settings/CryptKeeperConfirm.java b/src/com/android/settings/CryptKeeperConfirm.java
deleted file mode 100644
index 49d027b..0000000
--- a/src/com/android/settings/CryptKeeperConfirm.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings;
-
-import android.annotation.Nullable;
-import android.app.Activity;
-import android.app.StatusBarManager;
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.os.storage.IStorageManager;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.settings.core.InstrumentedFragment;
-
-import java.util.Arrays;
-import java.util.Locale;
-
-public class CryptKeeperConfirm extends InstrumentedFragment {
-
- private static final String TAG = "CryptKeeperConfirm";
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.CRYPT_KEEPER_CONFIRM;
- }
-
- public static class Blank extends Activity {
- private Handler mHandler = new Handler();
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.crypt_keeper_blank);
-
- if (Utils.isMonkeyRunning()) {
- finish();
- }
-
- StatusBarManager sbm = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE);
- sbm.disable(StatusBarManager.DISABLE_EXPAND
- | StatusBarManager.DISABLE_NOTIFICATION_ICONS
- | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
- | StatusBarManager.DISABLE_SYSTEM_INFO
- | StatusBarManager.DISABLE_HOME
- | StatusBarManager.DISABLE_SEARCH
- | StatusBarManager.DISABLE_RECENT
- | StatusBarManager.DISABLE_BACK);
-
- // Post a delayed message in 700 milliseconds to enable encryption.
- // NOTE: The animation on this activity is set for 500 milliseconds
- // I am giving it a little extra time to complete.
- mHandler.postDelayed(new Runnable() {
- public void run() {
- IBinder service = ServiceManager.getService("mount");
- if (service == null) {
- Log.e("CryptKeeper", "Failed to find the mount service");
- finish();
- return;
- }
-
- IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
- try {
- Bundle args = getIntent().getExtras();
- // TODO(b/120484642): Update vold to accept a password as a byte array
- byte[] passwordBytes = args.getByteArray("password");
- String password = passwordBytes != null ? new String(passwordBytes) : null;
- Arrays.fill(passwordBytes, (byte) 0);
- storageManager.encryptStorage(args.getInt("type", -1),
- password);
- } catch (Exception e) {
- Log.e("CryptKeeper", "Error while encrypting...", e);
- }
- }
- }, 700);
- }
- }
-
- private View mContentView;
- private Button mFinalButton;
- private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
-
- public void onClick(View v) {
- if (Utils.isMonkeyRunning()) {
- return;
- }
-
- /* WARNING - nasty hack!
- Settings for the lock screen are not available to the crypto
- screen (CryptKeeper) at boot. We duplicate the ones that
- CryptKeeper needs to the crypto key/value store when they are
- modified (see LockPatternUtils).
- However, prior to encryption, the crypto key/value store is not
- persisted across reboots, thus modified settings are lost to
- CryptKeeper.
- In order to make sure CryptKeeper had the correct settings after
- first encrypting, we thus need to rewrite them, which ensures the
- crypto key/value store is up to date. On encryption, this store
- is then persisted, and the settings will be there on future
- reboots.
- */
-
- // 1. The owner info.
- LockPatternUtils utils = new LockPatternUtils(getActivity());
- utils.setVisiblePatternEnabled(
- utils.isVisiblePatternEnabled(UserHandle.USER_SYSTEM),
- UserHandle.USER_SYSTEM);
- if (utils.isOwnerInfoEnabled(UserHandle.USER_SYSTEM)) {
- utils.setOwnerInfo(utils.getOwnerInfo(UserHandle.USER_SYSTEM),
- UserHandle.USER_SYSTEM);
- }
- int value = Settings.System.getInt(getContext().getContentResolver(),
- Settings.System.TEXT_SHOW_PASSWORD,
- 1);
- utils.setVisiblePasswordEnabled(value != 0, UserHandle.USER_SYSTEM);
-
- Intent intent = new Intent(getActivity(), Blank.class);
- intent.putExtras(getArguments());
- startActivity(intent);
-
- // 2. The system locale.
- try {
- IBinder service = ServiceManager.getService("mount");
- IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
- storageManager.setField("SystemLocale", Locale.getDefault().toLanguageTag());
- } catch (Exception e) {
- Log.e(TAG, "Error storing locale for decryption UI", e);
- }
- }
- };
-
- private void establishFinalConfirmationState() {
- mFinalButton = (Button) mContentView.findViewById(R.id.execute_encrypt);
- mFinalButton.setOnClickListener(mFinalClickListener);
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getActivity().setTitle(R.string.crypt_keeper_confirm_title);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mContentView = inflater.inflate(R.layout.crypt_keeper_confirm, null);
- establishFinalConfirmationState();
- return mContentView;
- }
-}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 61d1180..bf655ae 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -255,7 +255,6 @@
public static class BatterySaverScheduleSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
- public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
public static class DataUsageSummaryActivity extends SettingsActivity { /* empty */ }
public static class MobileDataUsageListActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 583766e..2f0e8b3 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -148,7 +148,6 @@
import com.android.settings.print.PrintJobSettingsFragment;
import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.privacy.PrivacyDashboardFragment;
-import com.android.settings.security.CryptKeeperSettings;
import com.android.settings.security.LockscreenDashboardFragment;
import com.android.settings.security.SecurityAdvancedSettings;
import com.android.settings.security.SecuritySettings;
@@ -246,7 +245,6 @@
PickupGestureSettings.class.getName(),
DoubleTwistGestureSettings.class.getName(),
SystemNavigationGestureSettings.class.getName(),
- CryptKeeperSettings.class.getName(),
DataUsageSummary.class.getName(),
DreamSettings.class.getName(),
UserSettings.class.getName(),
diff --git a/src/com/android/settings/security/CryptKeeperSettings.java b/src/com/android/settings/security/CryptKeeperSettings.java
deleted file mode 100644
index 2b65bf1..0000000
--- a/src/com/android/settings/security/CryptKeeperSettings.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.security;
-
-import android.app.Activity;
-import android.app.admin.DevicePolicyManager;
-import android.app.settings.SettingsEnums;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Resources;
-import android.os.BatteryManager;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.os.storage.StorageManager;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-
-import androidx.appcompat.app.AlertDialog;
-import androidx.preference.Preference;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.LockscreenCredential;
-import com.android.settings.CryptKeeperConfirm;
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.core.InstrumentedPreferenceFragment;
-import com.android.settings.password.ChooseLockSettingsHelper;
-import com.android.settings.password.ConfirmLockPattern;
-
-public class CryptKeeperSettings extends InstrumentedPreferenceFragment {
- private static final String TAG = "CryptKeeper";
- private static final String TYPE = "type";
- private static final String PASSWORD = "password";
-
- private static final int KEYGUARD_REQUEST = 55;
-
- // Minimum battery charge level (in percent) to launch encryption. If the battery charge is
- // lower than this, encryption should not be activated.
- private static final int MIN_BATTERY_LEVEL = 80;
-
- private View mContentView;
- private Button mInitiateButton;
- private View mPowerWarning;
- private View mBatteryWarning;
- private IntentFilter mIntentFilter;
-
- private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- final int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
- final int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
- final int invalidCharger = intent.getIntExtra(
- BatteryManager.EXTRA_INVALID_CHARGER, 0);
-
- final boolean levelOk = level >= MIN_BATTERY_LEVEL;
- final boolean pluggedOk =
- ((plugged & BatteryManager.BATTERY_PLUGGED_ANY) != 0) &&
- invalidCharger == 0;
-
- // Update UI elements based on power/battery status
- mInitiateButton.setEnabled(levelOk && pluggedOk);
- mPowerWarning.setVisibility(pluggedOk ? View.GONE : View.VISIBLE );
- mBatteryWarning.setVisibility(levelOk ? View.GONE : View.VISIBLE);
- }
- }
- };
-
- /**
- * If the user clicks to begin the reset sequence, we next require a
- * keyguard confirmation if the user has currently enabled one. If there
- * is no keyguard available, we prompt the user to set a password.
- */
- private Button.OnClickListener mInitiateListener = new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
- // TODO replace (or follow) this dialog with an explicit launch into password UI
- new AlertDialog.Builder(getActivity())
- .setTitle(R.string.crypt_keeper_dialog_need_password_title)
- .setMessage(R.string.crypt_keeper_dialog_need_password_message)
- .setPositiveButton(android.R.string.ok, null)
- .create()
- .show();
- }
- }
- };
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- mContentView = inflater.inflate(R.layout.crypt_keeper_settings, null);
-
- mIntentFilter = new IntentFilter();
- mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
-
- mInitiateButton = (Button) mContentView.findViewById(R.id.initiate_encrypt);
- mInitiateButton.setOnClickListener(mInitiateListener);
- mInitiateButton.setEnabled(false);
-
- mPowerWarning = mContentView.findViewById(R.id.warning_unplugged);
- mBatteryWarning = mContentView.findViewById(R.id.warning_low_charge);
-
- return mContentView;
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.CRYPT_KEEPER;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- getActivity().registerReceiver(mIntentReceiver, mIntentFilter,
- Context.RECEIVER_EXPORTED_UNAUDITED);
- }
-
- @Override
- public void onPause() {
- super.onPause();
- getActivity().unregisterReceiver(mIntentReceiver);
- }
-
- /**
- * If encryption is already started, and this launched via a "start encryption" intent,
- * then exit immediately - it's already up and running, so there's no point in "starting" it.
- */
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- Activity activity = getActivity();
- Intent intent = activity.getIntent();
- if (DevicePolicyManager.ACTION_START_ENCRYPTION.equals(intent.getAction())) {
- DevicePolicyManager dpm = (DevicePolicyManager)
- activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
- if (dpm != null) {
- int status = dpm.getStorageEncryptionStatus();
- if (status != DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE) {
- // There is nothing to do here, so simply finish() (which returns to caller)
- activity.finish();
- }
- }
- }
- activity.setTitle(R.string.crypt_keeper_encrypt_title);
- }
-
- /**
- * Keyguard validation is run using the standard {@link ConfirmLockPattern}
- * component as a subactivity
- * @param request the request code to be returned once confirmation finishes
- * @return true if confirmation launched
- */
- private boolean runKeyguardConfirmation(int request) {
- final LockPatternUtils utils = new LockPatternUtils(getActivity());
- if (utils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())
- == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
- showFinalConfirmation(StorageManager.CRYPT_TYPE_DEFAULT, "".getBytes());
- return true;
- }
-
- final Resources res = getActivity().getResources();
- final ChooseLockSettingsHelper.Builder builder =
- new ChooseLockSettingsHelper.Builder(getActivity(), this);
- return builder.setRequestCode(request)
- .setTitle(res.getText(R.string.crypt_keeper_encrypt_title))
- .setReturnCredentials(true)
- .show();
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- if (requestCode != KEYGUARD_REQUEST) {
- return;
- }
-
- // If the user entered a valid keyguard trace, present the final
- // confirmation prompt; otherwise, go back to the initial state.
- if (resultCode == Activity.RESULT_OK && data != null) {
- int type = data.getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_TYPE, -1);
- LockscreenCredential password = data.getParcelableExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD);
- if (password != null && !password.isNone()) {
- showFinalConfirmation(type, password.getCredential());
- }
- }
- }
-
- private void showFinalConfirmation(int type, byte[] password) {
- Preference preference = new Preference(getPreferenceManager().getContext());
- preference.setFragment(CryptKeeperConfirm.class.getName());
- preference.setTitle(R.string.crypt_keeper_confirm_title);
- addEncryptionInfoToPreference(preference, type, password);
- ((SettingsActivity) getActivity()).onPreferenceStartFragment(null, preference);
- }
-
- private void addEncryptionInfoToPreference(Preference preference, int type, byte[] password) {
- Activity activity = getActivity();
- DevicePolicyManager dpm = (DevicePolicyManager)
- activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
- if (dpm.getDoNotAskCredentialsOnBoot()) {
- preference.getExtras().putInt(TYPE, StorageManager.CRYPT_TYPE_DEFAULT);
- preference.getExtras().putByteArray(PASSWORD, "".getBytes());
- } else {
- preference.getExtras().putInt(TYPE, type);
- preference.getExtras().putByteArray(PASSWORD, password);
- }
- }
-}
diff --git a/src/com/android/settings/security/EncryptionStatusPreferenceController.java b/src/com/android/settings/security/EncryptionStatusPreferenceController.java
index 322be10..c6d7185 100644
--- a/src/com/android/settings/security/EncryptionStatusPreferenceController.java
+++ b/src/com/android/settings/security/EncryptionStatusPreferenceController.java
@@ -55,14 +55,8 @@
public void updateState(Preference preference) {
final boolean encryptionEnabled = LockPatternUtils.isDeviceEncryptionEnabled();
if (encryptionEnabled) {
- if (TextUtils.equals(getPreferenceKey(), PREF_KEY_ENCRYPTION_DETAIL_PAGE)) {
- preference.setFragment(null);
- }
preference.setSummary(R.string.crypt_keeper_encrypted_summary);
} else {
- if (TextUtils.equals(getPreferenceKey(), PREF_KEY_ENCRYPTION_DETAIL_PAGE)) {
- preference.setFragment(CryptKeeperSettings.class.getName());
- }
preference.setSummary(R.string.decryption_settings_summary);
}
diff --git a/tests/robotests/src/com/android/settings/security/EncryptionStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/EncryptionStatusPreferenceControllerTest.java
index 9f0e115..670299e 100644
--- a/tests/robotests/src/com/android/settings/security/EncryptionStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/security/EncryptionStatusPreferenceControllerTest.java
@@ -98,7 +98,7 @@
}
@Test
- public void updateSummary_unencrypted_shouldHasEncryptionFragment() {
+ public void updateSummary_unencrypted_shouldSayUnencrypted() {
ShadowLockPatternUtils.setDeviceEncryptionEnabled(false);
mController.updateState(mPreference);
@@ -106,11 +106,11 @@
final CharSequence summary = mContext.getText(R.string.decryption_settings_summary);
assertThat(mPreference.getSummary()).isEqualTo(summary);
assertThat(mController.getPreferenceKey()).isNotEqualTo(PREF_KEY_ENCRYPTION_SECURITY_PAGE);
- assertThat(mPreference.getFragment()).isEqualTo(CryptKeeperSettings.class.getName());
+ assertThat(mPreference.getFragment()).isNull();
}
@Test
- public void updateSummary_unencrypted_securityPage_shouldNotHaveEncryptionFragment() {
+ public void updateSummary_unencrypted_securityPage_shouldSayUnencrypted() {
mController =
new EncryptionStatusPreferenceController(mContext,
PREF_KEY_ENCRYPTION_SECURITY_PAGE);
@@ -120,7 +120,6 @@
final CharSequence summary = mContext.getText(R.string.decryption_settings_summary);
assertThat(mPreference.getSummary()).isEqualTo(summary);
-
- assertThat(mPreference.getFragment()).isNotEqualTo(CryptKeeperSettings.class.getName());
+ assertThat(mPreference.getFragment()).isNull();
}
}