Merge changes from topic "remove-fde"

* changes:
  Remove FDE support from accessibility settings
  Rename crypt_keeper_* strings that are still used
  Remove CryptKeeperSettings
  Remove CryptKeeper
This commit is contained in:
Eric Biggers
2022-03-08 18:37:00 +00:00
committed by Gerrit Code Review
44 changed files with 23 additions and 2845 deletions

View File

@@ -2834,25 +2834,6 @@
android:value="@string/menu_key_accounts"/>
</activity>
<activity android:name=".CryptKeeper"
androidprv:systemUserOnly="true"
android:immersive="true"
android:launchMode="singleTop"
android:excludeFromRecents="true"
android:theme="@style/Theme.CryptKeeper"
android:configChanges="mnc|mcc|keyboard|keyboardHidden|uiMode"
android:windowSoftInputMode="adjustResize"
android:screenOrientation="nosensor"
android:taskAffinity="com.android.settings.CryptKeeper"
android:exported="true"
android:process=":CryptKeeper">
<intent-filter android:priority="10">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Triggered when user-selected home app isn't encryption aware -->
<activity android:name=".FallbackHome"
android:excludeFromRecents="true"
@@ -2868,32 +2849,6 @@
</intent-filter>
</activity>
<activity android:name=".CryptKeeper$FadeToBlack"
android:immersive="true"
android:launchMode="singleTop"
android:theme="@style/CryptKeeperBlankTheme"
/>
<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"

View File

@@ -77,22 +77,6 @@
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" &lt;color name=&quot;crypt_keeper_clock_background&quot;>#ff9a9a9a&lt;/color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="20"
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
@@ -109,22 +93,6 @@
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" &lt;color name=&quot;crypt_keeper_clock_foreground&quot;>#ff666666&lt;/color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="21"
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
@@ -141,38 +109,6 @@
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" &lt;color name=&quot;crypt_keeper_clock_am_pm&quot;>#ff9a9a9a&lt;/color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="22"
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" &lt;color name=&quot;crypt_keeper_password_background&quot;>#70606060&lt;/color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="23"
column="5"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
@@ -2141,86 +2077,6 @@
column="8"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:textColor=&quot;#FFFFFF&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/crypt_keeper_emergency_button.xml"
line="35"
column="9"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:background=&quot;@color/crypt_keeper_password_background&quot;>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/crypt_keeper_password_entry.xml"
line="34"
column="9"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:background=&quot;@color/lock_pattern_background&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/crypt_keeper_pattern_field.xml"
line="27"
column="8"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:background=&quot;@color/crypt_keeper_password_background&quot;>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/crypt_keeper_pin_entry.xml"
line="34"
column="9"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"
message="Avoid using hardcoded color"
category="Correctness"
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" android:textColor=&quot;#B3FFFFFF&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/layout/crypt_keeper_status.xml"
line="55"
column="9"/>
</issue>
<issue
id="HardCodedColor"
severity="Error"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -1,86 +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:padding="16dip"
android:orientation="vertical"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dip"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:textSize="30dip"
android:textColor="@color/title_color"
android:text="@string/crypt_keeper_setup_title"
android:gravity="bottom"
/>
<!-- Divider -->
<RelativeLayout
android:id="@+id/top_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="horizontal"
>
<TextView
android:id="@+id/status"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/encroid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/encroid_waiting"
android:contentDescription="@null"
/>
<Button
android:id="@+id/factory_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="32dip"
android:text="@string/main_clear_button_text"
android:visibility="gone"
/>
</LinearLayout>
</LinearLayout>

View File

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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_marginTop="@dimen/crypt_keeper_pattern_top_margin">
<include layout="@layout/crypt_keeper_status" />
<LinearLayout
android:layout_width="@dimen/crypt_keeper_pattern_size"
android:layout_height="@dimen/crypt_keeper_pattern_size"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/crypt_keeper_pattern_separator">
<include layout="@layout/crypt_keeper_pattern_field" />
</LinearLayout>
<include layout="@layout/crypt_keeper_emergency_button" />
</LinearLayout>

View File

@@ -1,108 +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.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="64dip"
>
<ImageView
android:id="@+id/encroid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:paddingEnd="65dip"
android:src="@drawable/encroid_waiting"
android:contentDescription="@null"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dip"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="16dip"
android:layout_marginEnd="16dip"
android:textSize="30dip"
android:textColor="@color/title_color"
android:text="@string/crypt_keeper_setup_title"
android:gravity="bottom"
/>
<!-- Divider -->
<RelativeLayout
android:id="@+id/top_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</RelativeLayout>
<TextView
android:id="@+id/status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/top_divider"
android:paddingTop="21dip"
android:layout_marginStart="16dip"
android:layout_marginEnd="16dip"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<!-- Divider -->
<RelativeLayout
android:id="@+id/bottom_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/factory_reset"
android:visibility="gone"
>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</RelativeLayout>
<Button
android:id="@+id/factory_reset"
android:layout_width="208dip"
android:layout_height="48dip"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="80dip"
android:layout_marginEnd="16dip"
android:text="@string/main_clear_button_text"
android:visibility="gone"
/>
</RelativeLayout>
</FrameLayout>

View File

@@ -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>

View File

@@ -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>

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<!-- Emergency call button.
Text is set by CryptKeeper.updateEmergencyCallButtonState() -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:id="@+id/emergencyCallButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="14sp"
android:fontFamily="sans-serif"
android:textColor="#FFFFFF"
style="?android:attr/borderlessButtonStyle" />
</LinearLayout>

View File

@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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_marginTop="@dimen/crypt_keeper_password_top_margin">
<include layout="@layout/crypt_keeper_status" />
<LinearLayout
android:layout_width="@dimen/crypt_keeper_password_width"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="16dip"
android:layout_gravity="center_horizontal"
android:background="@color/crypt_keeper_password_background">
<include layout="@layout/crypt_keeper_password_field" />
</LinearLayout>
<include layout="@layout/crypt_keeper_emergency_button" />
</LinearLayout>

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<!-- Contents of the password entry field for CryptKeeper. Comes with an IME
switcher, if necessary. Assumed to be in a horizontal LinearLayout. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Note that crypt_keeper_pin_field.xml also has ImeAwareEditText with the same ID. -->
<ImeAwareEditText android:id="@+id/passwordEntry"
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight="1"
android:inputType="textPassword"
android:imeOptions="flagForceAscii"
android:textSize="16sp"
android:padding="10sp"
android:maxLength="500"
style="@style/TextAppearance.CryptKeeper_PasswordEntry" />
<include layout="@layout/crypt_keeper_switch_input_method" />
</merge>

View File

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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_marginTop="@dimen/crypt_keeper_pattern_top_margin">
<include layout="@layout/crypt_keeper_status" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/crypt_keeper_pattern_margin"
android:layout_marginEnd="@dimen/crypt_keeper_pattern_margin"
android:orientation="horizontal">
<include layout="@layout/crypt_keeper_pattern_field" />
</LinearLayout>
<include layout="@layout/crypt_keeper_emergency_button" />
</LinearLayout>

View File

@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<!-- Contents of the password entry field for CryptKeeper. Comes with an IME
switcher, if necessary. Assumed to be in a horizontal LinearLayout. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/lock_pattern_background" />
<include layout="@layout/crypt_keeper_switch_input_method" />
</merge>

View File

@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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_marginTop="@dimen/crypt_keeper_password_top_margin">
<include layout="@layout/crypt_keeper_status" />
<LinearLayout
android:layout_width="@dimen/crypt_keeper_password_width"
android:layout_height="wrap_content"
android:layout_marginTop="16dip"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:background="@color/crypt_keeper_password_background">
<include layout="@layout/crypt_keeper_pin_field" />
</LinearLayout>
<include layout="@layout/crypt_keeper_emergency_button" />
</LinearLayout>

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<!-- Contents of the password entry field for CryptKeeper. Comes with an IME
switcher, if necessary. Assumed to be in a horizontal LinearLayout. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Note that crypt_keeper_password_field.xml also has ImeAwareEditText with the same ID. -->
<ImeAwareEditText android:id="@+id/passwordEntry"
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight="1"
android:inputType="numberPassword"
android:textSize="28sp"
android:padding="4sp"
android:maxLength="500"
style="@style/TextAppearance.CryptKeeper_PasswordEntry" />
<include layout="@layout/crypt_keeper_switch_input_method" />
</merge>

View File

@@ -1,80 +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:padding="16dip"
android:orientation="vertical"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="48dip"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:textSize="30dip"
android:textColor="@color/title_color"
android:text="@string/crypt_keeper_setup_title"
android:gravity="bottom"
/>
<!-- Divider -->
<RelativeLayout
android:id="@+id/top_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</RelativeLayout>
<TextView
android:id="@+id/status"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/encroid"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1"
android:layout_gravity="bottom|end"
android:src="@drawable/encroid_waiting"
android:contentDescription="@null"
/>
<Button
android:id="@+id/factory_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="32dip"
android:layout_gravity="center"
android:text="@string/main_clear_button_text"
android:visibility="gone"
/>
</LinearLayout>

View File

@@ -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>

View File

@@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<!-- Status to show on the left side of lock screen -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<!-- We need android:gravity="center_horizontal" to make multi line
status strings look good -->
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:textSize="16sp"
android:fontFamily="sans-serif"
android:textColor="@android:color/white"
android:text="@string/enter_password"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal" />
<TextView
android:id="@+id/owner_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit ="marquee_forever"
android:textSize="16sp"
android:fontFamily="sans-serif"
android:textColor="#B3FFFFFF"
android:gravity="center_horizontal" />
</LinearLayout>

View File

@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2014, 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.
*/
-->
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/switch_ime_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@*android:drawable/ic_lockscreen_ime"
android:clickable="true"
android:contentDescription="@string/crypt_keeper_switch_input_method"
android:padding="@dimen/crypt_keeper_edit_text_ime_padding"
android:layout_gravity="center"
android:background="?android:attr/selectableItemBackground"
android:visibility="gone" />

View File

@@ -42,14 +42,6 @@
android:id="@+id/permissionDialog_title"
style="@style/AccessibilityDialogTitle" />
<TextView
android:id="@+id/encryption_warning"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/permissionDialog_description"
android:text="@string/accessibility_service_warning_description"

View File

@@ -19,12 +19,6 @@
<dimen name="screen_margin_top">72dip</dimen>
<dimen name="screen_margin_bottom">48dip</dimen>
<!-- CryptKeeper top margin for password/pin screen -->
<dimen name="crypt_keeper_password_top_margin">116dip</dimen>
<!-- CryptKeeper top margin for pattern screen -->
<dimen name="crypt_keeper_pattern_top_margin">128dip</dimen>
<dimen name="captioning_preview_height">150dp</dimen>
<dimen name="confirm_credentials_top_padding">20dp</dimen>

View File

@@ -17,8 +17,5 @@
<resources>
<!-- Whether there is a silent mode checkbox -->
<bool name="has_silent_mode">false</bool>
<!-- CryptKeeper allow rotation -->
<bool name="crypt_keeper_allow_rotation">true</bool>
</resources>

View File

@@ -23,24 +23,11 @@
<dimen name="screen_margin_bottom">48dip</dimen>
<dimen name="content_margin_left">16dip</dimen>
<dimen name="description_margin_top">26dip</dimen>
<dimen name="crypt_clock_size">120sp</dimen>
<!-- ActionBar contentInsetStart -->
<dimen name="actionbar_contentInsetStart">24dp</dimen>
<dimen name="actionbar_subsettings_contentInsetStart">80dp</dimen>
<!-- CryptKeeper top margin for password/pin screen -->
<dimen name="crypt_keeper_password_top_margin">256dip</dimen>
<!-- CryptKeeper top margin for pattern screen -->
<dimen name="crypt_keeper_pattern_top_margin">256dip</dimen>
<!-- CryptKeeper separation between status and pattern -->
<dimen name="crypt_keeper_pattern_separator">100dip</dimen>
<!-- CryptKeeper password/pin width -->
<dimen name="crypt_keeper_password_width">512dip</dimen>
<!-- SwitchBar margin start / end -->
<dimen name="switchbar_margin_start">24dp</dimen>
<dimen name="switchbar_margin_end">24dp</dimen>

View File

@@ -17,11 +17,6 @@
<resources
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
<color name="crypt_keeper_clock_background">#ff9a9a9a</color>
<color name="crypt_keeper_clock_foreground">#ff666666</color>
<color name="crypt_keeper_clock_am_pm">#ff9a9a9a</color>
<color name="crypt_keeper_password_background">#70606060</color>
<color name="divider_color">#20ffffff</color>
<color name="title_color">@android:color/holo_blue_light</color>
<color name="setup_wizard_wifi_color_dark">#89ffffff</color>

View File

@@ -41,8 +41,6 @@
<dimen name="balance_seekbar_center_marker_height">14dp</dimen>
<dimen name="balance_seekbar_center_marker_width">1dp</dimen>
<dimen name="crypt_clock_size">100sp</dimen>
<dimen name="divider_height">3dip</dimen>
<dimen name="divider_margin_top">6dip</dimen>
<dimen name="divider_margin_bottom">7dip</dimen>
@@ -154,27 +152,6 @@
<dimen name="wifi_assistant_image_top">32dp</dimen>
<dimen name="wifi_assistant_image_start">24dp</dimen>
<!-- CryptKeeper top margin for password/pin screen -->
<dimen name="crypt_keeper_password_top_margin">88dip</dimen>
<!-- CryptKeeper top margin for pattern screen -->
<dimen name="crypt_keeper_pattern_top_margin">88dip</dimen>
<!-- CryptKeeper password/pin width -->
<dimen name="crypt_keeper_password_width">280dip</dimen>
<!-- CryptKeeper emergency call button dimensions -->
<dimen name="crypt_keeper_emergency_call_space_above">16dip</dimen>
<!-- CryptKeeper edit text ime icon padding -->
<dimen name="crypt_keeper_edit_text_ime_padding">8dip</dimen>
<!-- CryptKeeper pattern margin on phone -->
<dimen name="crypt_keeper_pattern_margin">8dip</dimen>
<!-- CryptKeeper pattern size for tablet -->
<dimen name="crypt_keeper_pattern_size">354dip</dimen>
<!-- SIM Dialog Margin top -->
<dimen name="sim_dialog_margin_top">8dip</dimen>
<!-- SIM Dialog Margin bottom -->

View File

@@ -700,12 +700,12 @@
<string name="security_settings_title">Security</string>
<!-- Security Settings screen setting option title for the item to take you to the encryption and credential screen -->
<string name="encryption_and_credential_settings_title">Encryption &amp; credentials</string>
<!-- Security Settings screen Encryption and crendential summary -->
<!-- Security Settings screen Encryption and credential summary -->
<string name="encryption_and_credential_settings_summary" product="default">Phone encrypted</string>
<string name="decryption_settings_summary" product="default">Phone not encrypted</string>
<!-- Security Settings screen Encryption and crendential summary -->
<string name="not_encrypted_summary" product="default">Phone not encrypted</string>
<!-- Security Settings screen Encryption and credential summary -->
<string name="encryption_and_credential_settings_summary" product="tablet">Device encrypted</string>
<string name="decryption_settings_summary" product="tablet">Device not encrypted</string>
<string name="not_encrypted_summary" product="tablet">Device not encrypted</string>
<!-- Screen title for a list of settings controlling what to show on user's lockscreen [CHAR LIMIT=60] -->
<string name="lockscreen_settings_title">Lock screen</string>
<!-- Category title for the settings that control what lockscreen shows. [CHAR LIMIT=30] -->
@@ -1243,135 +1243,15 @@
<string name="fingerprint_last_delete_confirm">Yes, remove</string>
<!-- Title of the preferences category for preference items to control encryption -->
<string name="crypt_keeper_settings_title">Encryption</string>
<string name="encryption_settings_title">Encryption</string>
<!-- Title of the preferences item to control encryption -->
<string name="crypt_keeper_encrypt_title" product="tablet">Encrypt tablet</string>
<string name="encrypt_title" product="tablet">Encrypt tablet</string>
<!-- Title of the preferences item to control encryption -->
<string name="crypt_keeper_encrypt_title" product="default">Encrypt phone</string>
<string name="encrypt_title" product="default">Encrypt phone</string>
<!-- 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>
<!-- Title of the progress screen while encrypting the device -->
<string name="crypt_keeper_setup_title">Encrypting</string>
<!-- Informational text on the progress screen while encrypting the device -->
<string name="crypt_keeper_setup_description" product="tablet">Wait while your tablet
is being encrypted. <xliff:g id="percent" example="50">^1</xliff:g>% complete.</string>
<!-- Informational text on the progress screen while encrypting the device -->
<string name="crypt_keeper_setup_description" product="default">Wait while your phone
is being encrypted. <xliff:g id="percent" example="50">^1</xliff:g>% complete.</string>
<string name="crypt_keeper_setup_time_remaining" product="tablet">Wait while your tablet
is being encrypted. Time remaining: <xliff:g id="duration" example="1:23">^1</xliff:g></string>
<string name="crypt_keeper_setup_time_remaining" product="default">Wait while your phone
is being encrypted. Time remaining: <xliff:g id="duration" example="1:23">^1</xliff:g></string>
<string name="crypt_keeper_force_power_cycle" product="tablet">To unlock your tablet, turn it off and then on.</string>
<string name="crypt_keeper_force_power_cycle" product="default">To unlock your phone, turn it off and then on.</string>
<!-- Warn user their device will be wiped if they make x more failed attempts -->
<string name="crypt_keeper_warn_wipe">Warning: Your device will be wiped after
<xliff:g id="count" example="7">^1</xliff:g> more failed attempts to be unlocked!
</string>
<!-- Informational text on the password entry screen prompting the user for their password -->
<string name="crypt_keeper_enter_password">Type your password</string>
<!-- Title of the encryption screen when encrypting the device failed -->
<string name="crypt_keeper_failed_title">Encryption unsuccessful</string>
<!-- Informational text when encryption fails -->
<string name="crypt_keeper_failed_summary" product="tablet">
Encryption was interrupted and can\u2019t complete. As a result, the data on
your tablet is no longer accessible.
\n\n
To resume using your tablet, you need to perform a factory reset.
When you set up your tablet after the reset, you\u2019ll have an opportunity
to restore any data that was backed up to your Google Account.
</string>
<!-- Informational text when encryption fails -->
<string name="crypt_keeper_failed_summary" product="default">
Encryption was interrupted and can\u2019t complete. As a result, the data on
your phone is no longer accessible.
\n\nTo resume using your phone, you need to perform a factory reset.
When you set up your phone after the reset, you\u2019ll have an opportunity
to restore any data that was backed up to your Google Account.
</string>
<!-- Title of the encryption screen when decrypting the device failed -->
<string name="crypt_keeper_data_corrupt_title">Decryption unsuccessful</string>
<!-- Informational text when encryption fails -->
<string name="crypt_keeper_data_corrupt_summary" product="tablet">
The password you entered is correct, but unfortunately your data is
corrupt.
\n\nTo resume using your tablet, you need to perform a factory reset.
When you set up your tablet after the reset, you\u2019ll have an opportunity
to restore any data that was backed up to your Google Account.
</string>
<!-- Informational text when encryption fails -->
<string name="crypt_keeper_data_corrupt_summary" product="default">
The password you entered is correct, but unfortunately your data is
corrupt.
\n\nTo resume using your phone, you need to perform a factory reset.
When you set up your phone after the reset, you\u2019ll have an opportunity
to restore any data that was backed up to your Google Account.
</string>
<!-- Image button description to switch input method -->
<string name="crypt_keeper_switch_input_method">Switch input method</string>
<string name="encrypted_summary">Encrypted</string>
<!-- Unlock Picker Settings --><skip />
@@ -5824,30 +5704,6 @@
can't verify user consent. [CHAR LIMIT=NONE] -->
<string name="touch_filtered_warning">Because an app is obscuring a permission request, Settings
cant verify your response.</string>
<!-- Warning that the device data will not be encrypted with password or PIN if
enabling an accessibility service and there is a secure lock setup. [CHAR LIMIT=NONE] -->
<string name="enable_service_encryption_warning">If you turn on <xliff:g id="service"
example="TalkBack">%1$s</xliff:g>, your device wont use your screen lock to enhance
data encryption.</string>
<!-- Warning that the device data will not be encrypted with password or PIN if
choosing a secure lock and there is an enabled accessibility service. [CHAR LIMIT=NONE] -->
<string name="secure_lock_encryption_warning">Because you\u2019ve turned on an accessibility service,
your device wont use your screen lock to enhance data encryption.</string>
<!-- Message to the users to enter their pattern before enabling an accessibility service. [CHAR LIMIT=NONE] -->
<string name="enable_service_pattern_reason">Because turning on <xliff:g id="service"
example="TalkBack">%1$s</xliff:g> affects data encryption, you need to confirm your pattern.
</string>
<!-- Message to the users to enter their PIN before enabling an accessibility service. [CHAR LIMIT=NONE] -->
<string name="enable_service_pin_reason">Because turning on <xliff:g id="service"
example="TalkBack">%1$s</xliff:g> affects data encryption, you need to confirm your PIN.
</string>
<!-- Message to the users to enter their password before enabling an accessibility service. [CHAR LIMIT=NONE] -->
<string name="enable_service_password_reason">Because turning on <xliff:g id="service"
example="TalkBack">%1$s</xliff:g> affects data encryption, you need to confirm your password.
</string>
<!-- Warning that explains that accessibility services have a lot of access to user data [CHAR LIMIT=NONE] -->
<string name="accessibility_service_warning"><xliff:g id="service"
@@ -7146,26 +7002,6 @@
<!-- Messaage shown in dialog when you can't manually sync -->
<string name="cant_sync_dialog_message">Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync.</string>
<!-- This is displayed to the user when the device needs to be decrypted -->
<string name="enter_password">To start Android, enter your password</string>
<!-- Informational text on the pin entry screen prompting the user for their pin -->
<string name="enter_pin">To start Android, enter your PIN</string>
<!-- Informational text on the pattern entry screen prompting the user for their pattern -->
<string name="enter_pattern">To start Android, draw your pattern</string>
<!-- Message shown when user enters wrong pattern -->
<string name="cryptkeeper_wrong_pattern">Wrong Pattern</string>
<!-- Message shown when user enters wrong password -->
<string name="cryptkeeper_wrong_password">Wrong Password</string>
<!-- Message shown when user enters wrong PIN -->
<string name="cryptkeeper_wrong_pin">Wrong PIN</string>
<!-- Shown when a password has been entered, and we're checking it -->
<string name="checking_decryption">Checking\u2026</string>
<!-- Shown when password is correct, and we're starting Android -->
<string name="starting_android">Starting Android\u2026</string>
<!-- the following are for Settings Storage screen -->
<!-- Menu item/button 'delete' -->
<string name="delete">Delete</string>
@@ -7379,11 +7215,6 @@
<!-- Disclaimer string for data usage measured by device. [CHAR LIMIT=80] -->
<string name="data_usage_disclaimer">Carrier data accounting may differ from your device.</string>
<!-- Button at the bottom of the CryptKeeper screen to make an emergency call. -->
<string name="cryptkeeper_emergency_call">Emergency call</string>
<!-- Button at the bottom of the CryptKeeper screen that lets the user return to a call -->
<string name="cryptkeeper_return_to_call">Return to call</string>
<!-- Input label for the name of a VPN profile. [CHAR LIMIT=40] -->
<string name="vpn_name">Name</string>
<!-- Input label for the type of a VPN profile. [CHAR LIMIT=40] -->

View File

@@ -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 -->
@@ -281,14 +277,6 @@
<item name="android:textSize">24sp</item>
</style>
<style name="TextAppearance.CryptKeeper_PasswordEntry" parent="android:TextAppearance.DeviceDefault">
<item name="android:gravity">center_horizontal</item>
<item name="android:background">@null</item>
<item name="android:textCursorDrawable">@null</item>
<item name="android:singleLine">true</item>
<item name="android:imeOptions">flagForceAscii|actionDone</item>
</style>
<style name="TextAppearance.Medium" parent="@android:style/TextAppearance.DeviceDefault.Medium"/>
<style name="TextAppearance.Small" parent="@android:style/TextAppearance.DeviceDefault.Small"/>
<style name="TextAppearance.Switch"

View File

@@ -117,15 +117,6 @@
<item name="android:minWidth">@dimen/min_tap_target_size</item>
</style>
<style name="Theme.CryptKeeper" parent="@android:style/Theme.Material.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:background">@android:color/black</item>
<item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
</style>
<style name="ThemeOverlay.AlertDialog" parent="@android:style/ThemeOverlay.Material.Dialog.Alert">
<item name="android:windowSoftInputMode">adjustResize</item>
</style>

View File

@@ -21,12 +21,11 @@
<PreferenceCategory
android:key="encryption_and_credentials_status_category"
android:title="@string/crypt_keeper_settings_title">
android:title="@string/encryption_settings_title">
<Preference
android:key="encryption_and_credentials_encryption_status"
android:title="@string/crypt_keeper_encrypt_title"
android:fragment="com.android.settings.security.CryptKeeperSettings"
android:title="@string/encrypt_title"
android:summary="@string/summary_placeholder" />
</PreferenceCategory>

File diff suppressed because it is too large Load Diff

View File

@@ -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;
}
}

View File

@@ -199,7 +199,6 @@ public class Settings extends SettingsActivity {
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 */ }

View File

@@ -23,7 +23,6 @@ import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.storage.StorageManager;
import android.text.BidiFormatter;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -86,16 +85,6 @@ public class AccessibilityServiceWarning {
return ad;
}
/**
* Returns 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 static boolean isFullDiskEncrypted() {
return StorageManager.isNonDefaultBlockEncrypted();
}
private static View createEnableDialogContentView(Context context,
@NonNull AccessibilityServiceInfo info, View.OnClickListener listener,
UninstallActionPerformer performer) {
@@ -105,17 +94,6 @@ public class AccessibilityServiceWarning {
View content = inflater.inflate(R.layout.enable_accessibility_service_dialog_content,
null);
TextView encryptionWarningView = (TextView) content.findViewById(
R.id.encryption_warning);
if (isFullDiskEncrypted()) {
String text = context.getString(R.string.enable_service_encryption_warning,
getServiceName(context, info));
encryptionWarningView.setText(text);
encryptionWarningView.setVisibility(View.VISIBLE);
} else {
encryptionWarningView.setVisibility(View.GONE);
}
final Drawable icon;
if (info.getResolveInfo().getIconResource() == 0) {
icon = ContextCompat.getDrawable(context, R.drawable.ic_accessibility_generic);

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;
@@ -38,9 +36,6 @@ import android.content.pm.ServiceInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
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;
@@ -51,11 +46,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;
@@ -66,8 +59,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends
ToggleFeaturePreferenceFragment {
private static final String TAG = "ToggleAccessibilityServicePreferenceFragment";
private static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION = 1;
private LockPatternUtils mLockPatternUtils;
private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false);
private static final String EMPTY_STRING = "";
@@ -106,7 +97,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getPrefContext());
}
@Override
@@ -243,33 +233,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() {
@@ -321,23 +286,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()) {
@@ -461,20 +409,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();
}

View File

@@ -144,7 +144,6 @@ import com.android.settings.password.ChooseLockPattern;
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.SecuritySettings;
import com.android.settings.shortcut.CreateShortcut;
@@ -240,7 +239,6 @@ public class SettingsGateway {
PickupGestureSettings.class.getName(),
DoubleTwistGestureSettings.class.getName(),
SystemNavigationGestureSettings.class.getName(),
CryptKeeperSettings.class.getName(),
DataUsageSummary.class.getName(),
DreamSettings.class.getName(),
UserSettings.class.getName(),

View File

@@ -614,7 +614,6 @@ public class ChooseLockGeneric extends SettingsActivity {
disableUnusablePreferences();
updatePreferenceText();
updateCurrentPreference();
updatePreferenceSummaryIfNeeded();
} else if (!isRecreatingActivity) {
// Don't start the activity again if we are recreated for configuration change
updateUnlockMethodAndFinish(quality, false, true /* chooseLockSkipped */);
@@ -715,13 +714,6 @@ public class ChooseLockGeneric extends SettingsActivity {
}
}
private void setPreferenceSummary(ScreenLockType lock, @StringRes int summary) {
Preference preference = findPreference(lock.preferenceKey);
if (preference != null) {
preference.setSummary(summary);
}
}
private void updateCurrentPreference() {
String currentKey = getKeyForCurrent();
Preference preference = findPreference(currentKey);
@@ -764,28 +756,6 @@ public class ChooseLockGeneric extends SettingsActivity {
}
}
private void updatePreferenceSummaryIfNeeded() {
// On a default block encrypted device with accessibility, add a warning
// that your data is not credential encrypted
if (!StorageManager.isBlockEncrypted()) {
return;
}
if (StorageManager.isNonDefaultBlockEncrypted()) {
return;
}
if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList(
AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) {
return;
}
setPreferenceSummary(ScreenLockType.PATTERN, R.string.secure_lock_encryption_warning);
setPreferenceSummary(ScreenLockType.PIN, R.string.secure_lock_encryption_warning);
setPreferenceSummary(ScreenLockType.PASSWORD, R.string.secure_lock_encryption_warning);
setPreferenceSummary(ScreenLockType.MANAGED, R.string.secure_lock_encryption_warning);
}
protected Intent getLockManagedPasswordIntent(LockscreenCredential password) {
return mManagedPasswordProvider.createIntent(false, password);
}

View File

@@ -1,229 +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);
}
@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);
}
}
}

View File

@@ -55,15 +55,9 @@ public class EncryptionStatusPreferenceController extends BasePreferenceControll
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);
preference.setSummary(R.string.encrypted_summary);
} else {
if (TextUtils.equals(getPreferenceKey(), PREF_KEY_ENCRYPTION_DETAIL_PAGE)) {
preference.setFragment(CryptKeeperSettings.class.getName());
}
preference.setSummary(R.string.decryption_settings_summary);
preference.setSummary(R.string.not_encrypted_summary);
}
}

View File

@@ -94,23 +94,23 @@ public class EncryptionStatusPreferenceControllerTest {
assertThat(mPreference.getFragment()).isNull();
assertThat(mPreference.getSummary())
.isEqualTo(mContext.getText(R.string.crypt_keeper_encrypted_summary));
.isEqualTo(mContext.getText(R.string.encrypted_summary));
}
@Test
public void updateSummary_unencrypted_shouldHasEncryptionFragment() {
public void updateSummary_unencrypted_shouldSayUnencrypted() {
ShadowLockPatternUtils.setDeviceEncryptionEnabled(false);
mController.updateState(mPreference);
final CharSequence summary = mContext.getText(R.string.decryption_settings_summary);
final CharSequence summary = mContext.getText(R.string.not_encrypted_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);
@@ -118,9 +118,8 @@ public class EncryptionStatusPreferenceControllerTest {
mController.updateState(mPreference);
final CharSequence summary = mContext.getText(R.string.decryption_settings_summary);
final CharSequence summary = mContext.getText(R.string.not_encrypted_summary);
assertThat(mPreference.getSummary()).isEqualTo(summary);
assertThat(mPreference.getFragment()).isNotEqualTo(CryptKeeperSettings.class.getName());
assertThat(mPreference.getFragment()).isNull();
}
}