Merge "Remove support for converting from FDE to FBE" am: 804dc16a03 am: 629db5f9f8

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2026904

Change-Id: I6d5b12840e9940ecb5d076591ca8514b0085f438
This commit is contained in:
Eric Biggers
2022-03-16 18:57:35 +00:00
committed by Automerger Merge Worker
10 changed files with 0 additions and 458 deletions

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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:layout_marginBottom="12dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_marginTop="12dp"
android:textSize="18sp"
android:text="@string/confirm_convert_to_fbe_warning" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/button_confirm_convert_fbe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="12dp"
android:text="@string/button_confirm_convert_fbe" />
</LinearLayout>
</LinearLayout>

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 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:layout_marginBottom="12dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/preference_no_icon_padding_start"
android:layout_marginEnd="12dp"
android:layout_marginTop="12dp"
android:textSize="18sp"
android:text="@string/convert_to_fbe_warning" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/button_convert_fbe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="12dp"
android:text="@string/button_convert_fbe" />
</LinearLayout>
</LinearLayout>

View File

@@ -11403,11 +11403,6 @@
<!-- Title for the See more preference item in Special app access settings [CHAR LIMIT=30] --> <!-- Title for the See more preference item in Special app access settings [CHAR LIMIT=30] -->
<string name="special_access_more">See more</string> <string name="special_access_more">See more</string>
<!-- Developer option to convert to file encryption - final warning -->
<string name="confirm_convert_to_fbe_warning">Really wipe user data and convert to file encryption?</string>
<!-- Developer option to convert to file encryption - final button -->
<string name="button_confirm_convert_fbe">Wipe and convert</string>
<!-- Reset rate-limiting in the system service ShortcutManager. "ShortcutManager" is the name of a system service and not translatable. <!-- Reset rate-limiting in the system service ShortcutManager. "ShortcutManager" is the name of a system service and not translatable.
If the word "rate-limit" is hard to translate, use "Reset ShortcutManager API call limit" as the source text, which means If the word "rate-limit" is hard to translate, use "Reset ShortcutManager API call limit" as the source text, which means
the same thing in this context. the same thing in this context.

View File

@@ -88,12 +88,6 @@
android:summary="@string/runningservices_settings_summary" android:summary="@string/runningservices_settings_summary"
android:fragment="com.android.settings.applications.RunningServices" /> android:fragment="com.android.settings.applications.RunningServices" />
<Preference
android:key="convert_to_file_encryption"
android:title="@string/convert_to_file_encryption"
android:summary="@string/convert_to_file_encryption_enabled"
android:fragment="com.android.settings.applications.ConvertToFbe" />
<com.android.settings.development.ColorModePreference <com.android.settings.development.ColorModePreference
android:key="picture_color_mode" android:key="picture_color_mode"
android:title="@string/picture_color_mode" android:title="@string/picture_color_mode"

View File

@@ -1,55 +0,0 @@
/*
* Copyright (C) 2016 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.applications;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
public class ConfirmConvertToFbe extends SettingsPreferenceFragment {
static final String TAG = "ConfirmConvertToFBE";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.confirm_convert_fbe, null);
final Button button = (Button) rootView.findViewById(R.id.button_confirm_convert_fbe);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_FACTORY_RESET);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
intent.setPackage("android");
intent.putExtra(Intent.EXTRA_REASON, "convert_fbe");
getActivity().sendBroadcast(intent);
}
});
return rootView;
}
@Override
public int getMetricsCategory() {
return SettingsEnums.CONVERT_FBE_CONFIRM;
}
}

View File

@@ -1,97 +0,0 @@
/*
* Copyright (C) 2015 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.applications;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.password.ChooseLockSettingsHelper;
/* Class to prompt for conversion of userdata to file based encryption
*/
public class ConvertToFbe extends InstrumentedFragment {
static final String TAG = "ConvertToFBE";
private static final int KEYGUARD_REQUEST = 55;
private boolean runKeyguardConfirmation(int request) {
Resources res = getActivity().getResources();
final ChooseLockSettingsHelper.Builder builder =
new ChooseLockSettingsHelper.Builder(getActivity(), this);
return builder.setRequestCode(request)
.setTitle(res.getText(R.string.convert_to_file_encryption))
.show();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.convert_to_file_encryption);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.convert_fbe, null);
final Button button = rootView.findViewById(R.id.button_convert_fbe);
button.setOnClickListener(v -> {
if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
convert();
}
});
return rootView;
}
@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 credential, start the conversion
// process
if (resultCode == Activity.RESULT_OK) {
convert();
}
}
private void convert() {
new SubSettingLauncher(getContext())
.setDestination(ConfirmConvertToFbe.class.getName())
.setTitleRes(R.string.convert_to_file_encryption)
.setSourceMetricsCategory(getMetricsCategory())
.launch();
}
@Override
public int getMetricsCategory() {
return SettingsEnums.CONVERT_FBE;
}
}

View File

@@ -477,7 +477,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new HdcpCheckingPreferenceController(context)); controllers.add(new HdcpCheckingPreferenceController(context));
controllers.add(new BluetoothSnoopLogPreferenceController(context)); controllers.add(new BluetoothSnoopLogPreferenceController(context));
controllers.add(new OemUnlockPreferenceController(context, activity, fragment)); controllers.add(new OemUnlockPreferenceController(context, activity, fragment));
controllers.add(new FileEncryptionPreferenceController(context));
controllers.add(new PictureColorModePreferenceController(context, lifecycle)); controllers.add(new PictureColorModePreferenceController(context, lifecycle));
controllers.add(new WebViewAppPreferenceController(context)); controllers.add(new WebViewAppPreferenceController(context));
controllers.add(new CoolColorTemperaturePreferenceController(context)); controllers.add(new CoolColorTemperaturePreferenceController(context));

View File

@@ -1,85 +0,0 @@
/*
* Copyright (C) 2017 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.development;
import android.content.Context;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.storage.IStorageManager;
import android.text.TextUtils;
import android.sysprop.CryptoProperties;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class FileEncryptionPreferenceController extends DeveloperOptionsPreferenceController
implements PreferenceControllerMixin {
private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
private static final String KEY_STORAGE_MANAGER = "mount";
private final IStorageManager mStorageManager;
public FileEncryptionPreferenceController(Context context) {
super(context);
mStorageManager = getStorageManager();
}
@Override
public boolean isAvailable() {
if (mStorageManager == null) {
return false;
}
try {
return mStorageManager.isConvertibleToFBE();
} catch (RemoteException e) {
return false;
}
}
@Override
public String getPreferenceKey() {
return KEY_CONVERT_FBE;
}
@Override
public void updateState(Preference preference) {
if (CryptoProperties.type().orElse(CryptoProperties.type_values.NONE) !=
CryptoProperties.type_values.FILE) {
return;
}
mPreference.setEnabled(false);
mPreference.setSummary(
mContext.getResources().getString(R.string.convert_to_file_encryption_done));
}
private IStorageManager getStorageManager() {
try {
return IStorageManager.Stub.asInterface(
ServiceManager.getService(KEY_STORAGE_MANAGER));
} catch (VerifyError e) {
// Used for tests since Robolectric cannot initialize this class.
return null;
}
}
}

View File

@@ -15,7 +15,6 @@ com.android.settings.applications.appinfo.ExternalSourcesDetails
com.android.settings.applications.appinfo.WriteSettingsDetails com.android.settings.applications.appinfo.WriteSettingsDetails
com.android.settings.applications.AppLaunchSettings com.android.settings.applications.AppLaunchSettings
com.android.settings.applications.AppStorageSettings com.android.settings.applications.AppStorageSettings
com.android.settings.applications.ConfirmConvertToFbe
com.android.settings.applications.ProcessStatsDetail com.android.settings.applications.ProcessStatsDetail
com.android.settings.applications.ProcessStatsSummary com.android.settings.applications.ProcessStatsSummary
com.android.settings.applications.ProcessStatsUi com.android.settings.applications.ProcessStatsUi

View File

@@ -1,116 +0,0 @@
/*
* Copyright (C) 2017 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.development;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.RemoteException;
import android.os.storage.IStorageManager;
import android.sysprop.CryptoProperties;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
public class FileEncryptionPreferenceControllerTest {
@Mock
private Preference mPreference;
@Mock
private PreferenceScreen mPreferenceScreen;
@Mock
private IStorageManager mStorageManager;
private Context mContext;
private FileEncryptionPreferenceController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mController = new FileEncryptionPreferenceController(mContext);
when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
.thenReturn(mPreference);
}
@Test
public void isAvailable_storageManagerNull_shouldBeFalse() {
ReflectionHelpers.setField(mController, "mStorageManager", null);
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void isAvailable_notConvertibleToFBE_shouldBeFalse() throws RemoteException {
ReflectionHelpers.setField(mController, "mStorageManager", mStorageManager);
when(mStorageManager.isConvertibleToFBE()).thenReturn(false);
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void isAvailable_convertibleToFBE_shouldBeTrue() throws RemoteException {
ReflectionHelpers.setField(mController, "mStorageManager", mStorageManager);
when(mStorageManager.isConvertibleToFBE()).thenReturn(true);
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void updateState_settingIsNotFile_shouldDoNothing() throws RemoteException {
ReflectionHelpers.setField(mController, "mStorageManager", mStorageManager);
when(mStorageManager.isConvertibleToFBE()).thenReturn(true);
mController.displayPreference(mPreferenceScreen);
CryptoProperties.type(CryptoProperties.type_values.NONE);
mController.updateState(mPreference);
verify(mPreference, never()).setEnabled(anyBoolean());
verify(mPreference, never()).setSummary(anyString());
}
@Test
public void updateState_settingIsFile_shouldSetSummaryAndDisablePreference()
throws RemoteException {
ReflectionHelpers.setField(mController, "mStorageManager", mStorageManager);
when(mStorageManager.isConvertibleToFBE()).thenReturn(true);
mController.displayPreference(mPreferenceScreen);
CryptoProperties.type(CryptoProperties.type_values.FILE);
mController.updateState(mPreference);
verify(mPreference).setEnabled(false);
verify(mPreference).setSummary(mContext.getString(R.string.convert_to_file_encryption_done));
}
}