Merge "Add developer option to convert from FDE to FBE"
diff --git a/res/layout/convert_fbe.xml b/res/layout/convert_fbe.xml
new file mode 100644
index 0000000..4a9d7c0
--- /dev/null
+++ b/res/layout/convert_fbe.xml
@@ -0,0 +1,46 @@
+<?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="12dp"
+ 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>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d5e2077..bbf9c80 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2006,6 +2006,18 @@
<string name="night_mode_yes">Always on</string>
<!-- Sound & display settings screen, theme setting value to automatically switch between a light- or dark-colored user interface [CHAR LIMIT=30] -->
<string name="night_mode_auto">Automatic</string>
+
+ <!-- Option to convert userdata to file encryption on Nexus M devices -->
+ <string name="convert_to_file_encryption">Convert to file encryption</string>
+ <string name="convert_to_file_encryption_enabled">Convert ...</string>
+ <string name="convert_to_file_encryption_done">Already file encrypted</string>
+ <string name="convert_to_fbe_warning">
+ Convert data partition to file based encryption.\n
+ !!Warning!! This will erase all your data.\n
+ This feature is alpha, and may not work correctly.\n
+ Press \'Wipe and convert...\' to continue.</string>
+ <string name="button_convert_fbe">Wipe and convert...</string>
+
<!-- Sound & display settings screen, setting option name to change screen timeout -->
<string name="screen_timeout">Sleep</string>
<!-- Sound & display settings screen, setting option name to change screen timeout [CHAR LIMIT=30] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 8417e48..1770f13 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -67,6 +67,12 @@
android:entries="@array/night_mode_entries"
android:entryValues="@array/night_mode_values" />
+ <PreferenceScreen
+ 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.ColorModePreference
android:key="color_mode"
android:title="@string/picture_color_mode"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 756cac2..5d578eb 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -53,6 +53,7 @@
import android.os.StrictMode;
import android.os.SystemProperties;
import android.os.UserManager;
+import android.os.storage.IMountService;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.provider.Settings.Global;
@@ -175,6 +176,7 @@
private static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
private static final String KEY_NIGHT_MODE = "night_mode";
+ private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
private static final int RESULT_DEBUG_APP = 1000;
private static final int RESULT_MOCK_LOCATION_APP = 1001;
@@ -407,6 +409,16 @@
removePreferenceForProduction(hdcpChecking);
}
+ try {
+ IBinder service = ServiceManager.getService("mount");
+ IMountService mountService = IMountService.Stub.asInterface(service);
+ if (!mountService.isConvertibleToFBE()) {
+ removePreference(KEY_CONVERT_FBE);
+ }
+ } catch(RemoteException e) {
+ removePreference(KEY_CONVERT_FBE);
+ }
+
mNightModePreference = (DropDownPreference) findPreference(KEY_NIGHT_MODE);
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
diff --git a/src/com/android/settings/applications/ConvertToFBE.java b/src/com/android/settings/applications/ConvertToFBE.java
new file mode 100644
index 0000000..e514942
--- /dev/null
+++ b/src/com/android/settings/applications/ConvertToFBE.java
@@ -0,0 +1,45 @@
+/*
+ * 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.app.Fragment;
+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;
+
+/* Class to prompt for conversion of userdata to file based encryption
+ */
+public class ConvertToFBE extends Fragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.convert_fbe, null);
+
+ final Button button = (Button) rootView.findViewById(R.id.button_convert_fbe);
+ button.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ // Perform action on click
+ }
+ });
+
+ return rootView;
+ }
+}