Merge "Use RestrictedRadioButton in SetupRedactionInterstitial"
diff --git a/Android.mk b/Android.mk
index 2adad1f..72db1ab 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,7 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_JAVA_LIBRARIES := bouncycastle conscrypt telephony-common ims-common
+LOCAL_JAVA_LIBRARIES := bouncycastle core-oj telephony-common ims-common
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-support-v4 \
     android-support-v13 \
diff --git a/res/drawable-nodpi/work_challenge_background.png b/res/drawable-nodpi/work_challenge_background.png
new file mode 100644
index 0000000..d38668f
--- /dev/null
+++ b/res/drawable-nodpi/work_challenge_background.png
Binary files differ
diff --git a/res/layout-land/confirm_lock_password.xml b/res/layout-land/confirm_lock_password.xml
index 0d46bfa..dff4e4d 100644
--- a/res/layout-land/confirm_lock_password.xml
+++ b/res/layout-land/confirm_lock_password.xml
@@ -13,81 +13,89 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/topLayout"
-    android:orientation="vertical"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Title"
-        android:id="@+id/headerText"
-        android:layout_marginStart="24dp"
-        android:layout_marginEnd="24dp"
-        android:layout_marginTop="12dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textColor="?android:attr/colorAccent"/>
+    <include layout="@layout/confirm_lock_background_base" />
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Body1"
-        android:id="@+id/detailsText"
-        android:layout_marginStart="24dp"
-        android:layout_marginEnd="24dp"
-        android:layout_marginTop="8dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        />
-
-    <View
+    <LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/topLayout"
+        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"/>
+        android:layout_height="match_parent">
 
-    <FrameLayout
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:orientation="horizontal">
-
-        <Button
-            style="@android:style/Widget.Material.Button.Borderless"
-            android:id="@+id/cancelButton"
+        <TextView
+            style="@android:style/TextAppearance.Material.Title"
+            android:id="@+id/headerText"
+            android:layout_marginStart="24dp"
+            android:layout_marginEnd="24dp"
+            android:layout_marginTop="12dp"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="start|bottom"
-            android:text="@string/cancel"
-            android:layout_marginStart="8dp"
-            android:layout_marginEnd="8dp"
-            android:layout_marginBottom="14dp"/>
+            android:textColor="?android:attr/colorAccent"/>
 
-        <EditText android:id="@+id/password_entry"
-            android:layout_width="208dp"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal|bottom"
-            android:layout_marginBottom="26dp"
-            android:inputType="textPassword"
-            android:imeOptions="actionNext|flagNoFullscreen"
-            android:gravity="center"
-            android:textSize="16sp"
-            style="@style/TextAppearance.PasswordEntry"/>
-
-        <TextView style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
-            android:accessibilityLiveRegion="polite"
-            android:id="@+id/errorText"
+        <TextView
+            style="@android:style/TextAppearance.Material.Body1"
+            android:id="@+id/detailsText"
+            android:layout_marginStart="24dp"
+            android:layout_marginEnd="24dp"
+            android:layout_marginTop="8dp"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal|bottom"
-            android:layout_marginBottom="10dp"/>
+            />
 
-        <ImageView
-            android:id="@+id/fingerprintIcon"
-            android:layout_gravity="end|bottom"
-            android:layout_width="wrap_content"
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"/>
+
+        <FrameLayout
             android:layout_height="wrap_content"
-            android:layout_marginBottom="28dp"
-            android:layout_marginEnd="20dp"
-            android:visibility="gone"/>
-    </FrameLayout>
+            android:layout_width="match_parent"
+            android:orientation="horizontal">
 
-</LinearLayout>
\ No newline at end of file
+            <Button
+                style="@android:style/Widget.Material.Button.Borderless"
+                android:id="@+id/cancelButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="start|bottom"
+                android:text="@string/cancel"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:layout_marginBottom="14dp"/>
+
+            <EditText android:id="@+id/password_entry"
+                android:layout_width="208dp"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal|bottom"
+                android:layout_marginBottom="26dp"
+                android:inputType="textPassword"
+                android:imeOptions="actionNext|flagNoFullscreen"
+                android:gravity="center"
+                android:textSize="16sp"
+                style="@style/TextAppearance.PasswordEntry"/>
+
+            <TextView style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
+                android:accessibilityLiveRegion="polite"
+                android:id="@+id/errorText"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal|bottom"
+                android:layout_marginBottom="10dp"/>
+
+            <ImageView
+                android:id="@+id/fingerprintIcon"
+                android:layout_gravity="end|bottom"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="28dp"
+                android:layout_marginEnd="20dp"
+                android:visibility="gone"/>
+        </FrameLayout>
+
+    </LinearLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout-land/confirm_lock_pattern.xml b/res/layout-land/confirm_lock_pattern.xml
index 329f52a..81f257e 100644
--- a/res/layout-land/confirm_lock_pattern.xml
+++ b/res/layout-land/confirm_lock_pattern.xml
@@ -13,103 +13,110 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/topLayout"
-    android:orientation="horizontal"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:clipChildren="false"
-    android:clipToPadding="false">
+    android:layout_height="match_parent" >
 
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:layout_weight="1"
-        android:orientation="vertical">
+    <include layout="@layout/confirm_lock_background_base" />
 
-        <TextView
-            style="@android:style/TextAppearance.Material.Headline"
-            android:id="@+id/headerText"
-            android:layout_marginStart="32dp"
-            android:layout_marginEnd="32dp"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textColor="?android:attr/colorAccent"/>
-
-        <TextView
-            style="@android:style/TextAppearance.Material.Body1"
-            android:id="@+id/detailsText"
-            android:layout_marginStart="32dp"
-            android:layout_marginEnd="32dp"
-            android:layout_marginTop="12dp"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"/>
-
-        <Button
-            style="@android:style/Widget.Material.Button.Borderless"
-            android:id="@+id/cancelButton"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/cancel"
-            android:layout_marginStart="16dp"
-            android:layout_marginEnd="16dp"
-            android:layout_marginTop="16dp"/>
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
+    <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/topLayout"
         android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
         android:clipChildren="false"
         android:clipToPadding="false">
 
-        <View
-            android:id="@+id/leftSpacer"
+        <LinearLayout
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="1"
+            android:orientation="vertical">
+
+            <TextView
+                style="@android:style/TextAppearance.Material.Headline"
+                android:id="@+id/headerText"
+                android:layout_marginStart="32dp"
+                android:layout_marginEnd="32dp"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textColor="?android:attr/colorAccent"/>
+
+            <TextView
+                style="@android:style/TextAppearance.Material.Body1"
+                android:id="@+id/detailsText"
+                android:layout_marginStart="32dp"
+                android:layout_marginEnd="32dp"
+                android:layout_marginTop="12dp"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+
+            <Button
+                style="@android:style/Widget.Material.Button.Borderless"
+                android:id="@+id/cancelButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/cancel"
+                android:layout_marginStart="16dp"
+                android:layout_marginEnd="16dp"
+                android:layout_marginTop="16dp"/>
+        </LinearLayout>
+
+        <LinearLayout
             android:layout_width="0dp"
             android:layout_height="match_parent"
-            android:layout_weight="0.4"/>
-
-        <FrameLayout
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:orientation="horizontal"
             android:clipChildren="false"
             android:clipToPadding="false">
 
-            <com.android.internal.widget.LockPatternView
-                android:id="@+id/lockPattern"
-                android:layout_width="288dp"
-                android:layout_height="288dp"
-                android:layout_marginStart="-42dp"
-                android:layout_marginEnd="-42dp"
-                android:layout_gravity="center_vertical"/>
+            <View
+                android:id="@+id/leftSpacer"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="0.4"/>
 
-            <TextView
-                style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
-                android:accessibilityLiveRegion="polite"
-                android:id="@+id/errorText"
+            <FrameLayout
                 android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:clipChildren="false"
+                android:clipToPadding="false">
+
+                <com.android.internal.widget.LockPatternView
+                    android:id="@+id/lockPattern"
+                    android:layout_width="288dp"
+                    android:layout_height="288dp"
+                    android:layout_marginStart="-42dp"
+                    android:layout_marginEnd="-42dp"
+                    android:layout_gravity="center_vertical"/>
+
+                <TextView
+                    style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
+                    android:accessibilityLiveRegion="polite"
+                    android:id="@+id/errorText"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom|center_horizontal"
+                    android:layout_marginBottom="24dp"/>
+            </FrameLayout>
+
+            <View
+                android:id="@+id/rightSpacer"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"/>
+
+            <ImageView
+                android:id="@+id/fingerprintIcon"
+                android:layout_gravity="center_vertical"
+                android:layout_width="0dp"
+                android:layout_weight="1"
                 android:layout_height="wrap_content"
-                android:layout_gravity="bottom|center_horizontal"
-                android:layout_marginBottom="24dp"/>
-        </FrameLayout>
+                android:visibility="gone"/>
+        </LinearLayout>
 
-        <View
-            android:id="@+id/rightSpacer"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"/>
-
-        <ImageView
-            android:id="@+id/fingerprintIcon"
-            android:layout_gravity="center_vertical"
-            android:layout_width="0dp"
-            android:layout_weight="1"
-            android:layout_height="wrap_content"
-            android:visibility="gone"/>
-    </LinearLayout>
-
-</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
-
+    </com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/confirm_lock_background_base.xml b/res/layout/confirm_lock_background_base.xml
new file mode 100644
index 0000000..62be672
--- /dev/null
+++ b/res/layout/confirm_lock_background_base.xml
@@ -0,0 +1,21 @@
+<?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.
+-->
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/background_image"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:scaleType="centerCrop" />
\ No newline at end of file
diff --git a/res/layout/confirm_lock_password_base.xml b/res/layout/confirm_lock_password_base.xml
index b20131a..3478dba 100644
--- a/res/layout/confirm_lock_password_base.xml
+++ b/res/layout/confirm_lock_password_base.xml
@@ -13,79 +13,87 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/topLayout"
-    android:orientation="vertical"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Headline"
-        android:id="@+id/headerText"
-        android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginTop="?attr/confirmDeviceCredentialsTopMargin"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textColor="?android:attr/colorAccent"/>
+    <include layout="@layout/confirm_lock_background_base" />
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Body1"
-        android:id="@+id/detailsText"
-        android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginTop="12dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        />
+    <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/topLayout"
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
 
-    <Button
-        style="@android:style/Widget.Material.Button.Borderless"
-        android:id="@+id/cancelButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/cancel"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="16dp"
-        android:layout_marginTop="16dp"/>
+        <TextView
+            style="@android:style/TextAppearance.Material.Headline"
+            android:id="@+id/headerText"
+            android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginTop="?attr/confirmDeviceCredentialsTopMargin"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="?android:attr/colorAccent"/>
 
-    <View android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"/>
+        <TextView
+            style="@android:style/TextAppearance.Material.Body1"
+            android:id="@+id/detailsText"
+            android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginTop="12dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            />
 
-    <EditText
-        android:id="@+id/password_entry"
-        android:layout_width="208dp"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginTop="-40dp"
-        android:inputType="textPassword"
-        android:imeOptions="actionNext|flagNoFullscreen"
-        android:gravity="center"
-        android:textSize="16sp"
-        style="@style/TextAppearance.PasswordEntry"/>
+        <Button
+            style="@android:style/Widget.Material.Button.Borderless"
+            android:id="@+id/cancelButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/cancel"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginTop="16dp"/>
 
-    <TextView
-        style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
-        android:accessibilityLiveRegion="polite"
-        android:id="@+id/errorText"
-        android:layout_width="wrap_content"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginStart="12dp"
-        android:layout_marginEnd="12dp"
-        android:gravity="center_vertical"/>
+        <View android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"/>
 
-    <ImageView
-        android:id="@+id/fingerprintIcon"
-        android:layout_gravity="center_horizontal"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentBottom="true"
-        android:layout_marginBottom="24dp"
-        android:contentDescription="@string/confirm_fingerprint_icon_content_description"
-        android:visibility="gone"/>
+        <EditText
+            android:id="@+id/password_entry"
+            android:layout_width="208dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="-40dp"
+            android:inputType="textPassword"
+            android:imeOptions="actionNext|flagNoFullscreen"
+            android:gravity="center"
+            android:textSize="16sp"
+            style="@style/TextAppearance.PasswordEntry"/>
 
-</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
\ No newline at end of file
+        <TextView
+            style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
+            android:accessibilityLiveRegion="polite"
+            android:id="@+id/errorText"
+            android:layout_width="wrap_content"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginStart="12dp"
+            android:layout_marginEnd="12dp"
+            android:gravity="center_vertical"/>
+
+        <ImageView
+            android:id="@+id/fingerprintIcon"
+            android:layout_gravity="center_horizontal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:layout_marginBottom="24dp"
+            android:contentDescription="@string/confirm_fingerprint_icon_content_description"
+            android:visibility="gone"/>
+
+    </com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/confirm_lock_pattern_base.xml b/res/layout/confirm_lock_pattern_base.xml
index a69d297..d5dee74 100644
--- a/res/layout/confirm_lock_pattern_base.xml
+++ b/res/layout/confirm_lock_pattern_base.xml
@@ -13,83 +13,91 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/topLayout"
-    android:orientation="vertical"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent">
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Headline"
-        android:id="@+id/headerText"
-        android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginTop="?attr/confirmDeviceCredentialsTopMargin"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textColor="?android:attr/colorAccent"/>
+    <include layout="@layout/confirm_lock_background_base" />
 
-    <TextView
-        style="@android:style/TextAppearance.Material.Body1"
-        android:id="@+id/detailsText"
-        android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
-        android:layout_marginTop="12dp"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        />
-
-    <Button
-        style="@android:style/Widget.Material.Button.Borderless"
-        android:id="@+id/cancelButton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/cancel"
-        android:layout_marginStart="16dp"
-        android:layout_marginEnd="16dp"
-        android:layout_marginTop="16dp"/>
-
-    <View android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="0.5"/>
-
-    <com.android.internal.widget.LockPatternView
-        android:id="@+id/lockPattern"
-        android:layout_width="312dp"
-        android:layout_height="312dp"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginTop="-46dp"
-        android:layout_marginBottom="-46dp"/>
-
-    <LinearLayout
+    <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/topLayout"
+        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:orientation="vertical">
+        android:layout_height="match_parent">
 
         <TextView
-            style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
-            android:accessibilityLiveRegion="polite"
-            android:id="@+id/errorText"
-            android:layout_width="wrap_content"
-            android:layout_height="0dp"
-            android:layout_weight="1"
-            android:layout_gravity="center_horizontal"
-            android:layout_marginTop="12dp"
-            android:layout_marginStart="12dp"
-            android:layout_marginEnd="12dp"
-            android:gravity="center_vertical"/>
-
-        <ImageView
-            android:id="@+id/fingerprintIcon"
-            android:layout_gravity="center_horizontal"
+            style="@android:style/TextAppearance.Material.Headline"
+            android:id="@+id/headerText"
+            android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginTop="?attr/confirmDeviceCredentialsTopMargin"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:layout_marginBottom="24dp"
-            android:contentDescription="@string/confirm_fingerprint_icon_content_description"
-            android:visibility="gone"/>
-    </LinearLayout>
+            android:textColor="?android:attr/colorAccent"/>
 
-</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
\ No newline at end of file
+        <TextView
+            style="@android:style/TextAppearance.Material.Body1"
+            android:id="@+id/detailsText"
+            android:layout_marginStart="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginEnd="?attr/confirmDeviceCredentialsSideMargin"
+            android:layout_marginTop="12dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            />
+
+        <Button
+            style="@android:style/Widget.Material.Button.Borderless"
+            android:id="@+id/cancelButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/cancel"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginTop="16dp"/>
+
+        <View android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="0.5"/>
+
+        <com.android.internal.widget.LockPatternView
+            android:id="@+id/lockPattern"
+            android:layout_width="312dp"
+            android:layout_height="312dp"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="-46dp"
+            android:layout_marginBottom="-46dp"/>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:orientation="vertical">
+
+            <TextView
+                style="@style/TextAppearance.ConfirmDeviceCredentialsErrorText"
+                android:accessibilityLiveRegion="polite"
+                android:id="@+id/errorText"
+                android:layout_width="wrap_content"
+                android:layout_height="0dp"
+                android:layout_weight="1"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginTop="12dp"
+                android:layout_marginStart="12dp"
+                android:layout_marginEnd="12dp"
+                android:gravity="center_vertical"/>
+
+            <ImageView
+                android:id="@+id/fingerprintIcon"
+                android:layout_gravity="center_horizontal"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
+                android:layout_marginBottom="24dp"
+                android:contentDescription="@string/confirm_fingerprint_icon_content_description"
+                android:visibility="gone"/>
+        </LinearLayout>
+
+    </com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a951776..8625ed7 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -82,6 +82,7 @@
 
     <color name="warning">#ff5621</color>
     <color name="confirm_device_credential_dark_background">#263238</color>
+    <color name="confirm_device_credential_transparent_black">#60000000</color>
     <color name="fab_ripple">#1fffffff</color><!-- 12% white -->
     <color name="fab_shape">?android:attr/colorAccent</color>
     <color name="voice_interaction_highlight">#33b5e5</color>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index b15a77c..6288155 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -255,6 +255,9 @@
 
         <item name="android:windowAnimationStyle">@style/ConfirmDeviceCredentialsAnimationStyle</item>
     </style>
+    <style name="Theme.ConfirmDeviceCredentialsWork" parent="Theme.ConfirmDeviceCredentialsDark">
+        <item name="@*android:regularColor">@*android:color/white</item>
+    </style>
 
     <style name="Theme.FingerprintEnroll" parent="@*android:style/Theme.Material.Settings.NoActionBar">
         <item name="android:windowAnimationStyle">@style/Animation.SuwWindowAnimation</item>
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 1c34c85..c576897 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -176,7 +176,7 @@
                     !mLockPatternUtils.isSeparateProfileChallengeAllowed(targetUser)) {
                 // Always use parent if explicitely requested or if profile challenge is not
                 // supported
-                mUserId = Utils.getSameOwnerUserId(getContext(), getArguments());
+                mUserId = Utils.getUserIdFromBundle(getContext(), getArguments());
             } else {
                 mUserId = targetUser;
             }
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 6739475..86b6a52 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -238,7 +238,7 @@
                 throw new SecurityException("Fragment contained in wrong activity");
             }
             // Only take this argument into account if it belongs to the current profile.
-            mUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
+            mUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
             mRequestedQuality = Math.max(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
                     mRequestedQuality), mLockPatternUtils.getRequestedPasswordQuality(
                     mUserId));
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index 93ffa95..dbbe08c 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -370,7 +370,7 @@
             }
             Intent intent = getActivity().getIntent();
             // Only take this argument into account if it belongs to the current profile.
-            mUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
+            mUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
         }
 
         @Override
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index b88dea2..70ecdfd 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -90,7 +90,7 @@
     boolean launchConfirmationActivity(int request, CharSequence title, boolean returnCredentials,
             int userId) {
         return launchConfirmationActivity(request, title, null, null,
-                returnCredentials, false, false, 0, Utils.getSameOwnerUserId(mActivity, userId));
+                returnCredentials, false, false, 0, Utils.enforceSameOwner(mActivity, userId));
     }
 
     /**
@@ -110,7 +110,7 @@
             @Nullable CharSequence header, @Nullable CharSequence description,
             boolean returnCredentials, boolean external) {
         return launchConfirmationActivity(request, title, header, description,
-                returnCredentials, external, false, 0, Utils.getEffectiveUserId(mActivity));
+                returnCredentials, external, false, 0, Utils.getCredentialOwnerUserId(mActivity));
     }
 
     /**
@@ -131,7 +131,7 @@
             @Nullable CharSequence header, @Nullable CharSequence description,
             boolean returnCredentials, boolean external, int userId) {
         return launchConfirmationActivity(request, title, header, description,
-                returnCredentials, external, false, 0, Utils.getSameOwnerUserId(mActivity, userId));
+                returnCredentials, external, false, 0, Utils.enforceSameOwner(mActivity, userId));
     }
 
     /**
@@ -147,7 +147,7 @@
             @Nullable CharSequence header, @Nullable CharSequence description,
             long challenge) {
         return launchConfirmationActivity(request, title, header, description,
-                false, false, true, challenge, Utils.getEffectiveUserId(mActivity));
+                false, false, true, challenge, Utils.getCredentialOwnerUserId(mActivity));
     }
 
     private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
diff --git a/src/com/android/settings/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/ConfirmDeviceCredentialActivity.java
index c4587eb..28c0515 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialActivity.java
@@ -64,12 +64,12 @@
         Intent intent = getIntent();
         String title = intent.getStringExtra(KeyguardManager.EXTRA_TITLE);
         String details = intent.getStringExtra(KeyguardManager.EXTRA_DESCRIPTION);
-        int userId = Utils.getEffectiveUserId(this);
+        int userId = Utils.getCredentialOwnerUserId(this);
         if (isInternalActivity()) {
-            int givenUserId = intent.getIntExtra(Intent.EXTRA_USER_ID, userId);
-            UserManager userManager = UserManager.get(this);
-            if (userManager.isSameProfileGroup(givenUserId, userId)) {
-                userId = givenUserId;
+            try {
+                userId = Utils.getUserIdFromBundle(this, intent.getExtras());
+            } catch (SecurityException se) {
+                Log.e(TAG, "Invalid intent extra", se);
             }
         }
         ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
diff --git a/src/com/android/settings/ConfirmDeviceCredentialBaseActivity.java b/src/com/android/settings/ConfirmDeviceCredentialBaseActivity.java
index d9af800..e6dd5e0 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialBaseActivity.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialBaseActivity.java
@@ -18,8 +18,10 @@
 
 import android.app.Fragment;
 import android.app.KeyguardManager;
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.UserManager;
 import android.view.MenuItem;
 import android.view.WindowManager;
 
@@ -33,7 +35,12 @@
 
     @Override
     protected void onCreate(Bundle savedState) {
-        if (getIntent().getBooleanExtra(ConfirmDeviceCredentialBaseFragment.DARK_THEME, false)) {
+        int credentialOwnerUserId = Utils.getCredentialOwnerUserId(this,
+                Utils.getUserIdFromBundle(this, getIntent().getExtras()));
+        if (Utils.isManagedProfile(UserManager.get(this), credentialOwnerUserId)) {
+            setTheme(R.style.Theme_ConfirmDeviceCredentialsWork);
+        } else if (getIntent().getBooleanExtra(
+                ConfirmDeviceCredentialBaseFragment.DARK_THEME, false)) {
             setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
             mDark = true;
         }
diff --git a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
index 0a22d45..86c9fca 100644
--- a/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/ConfirmDeviceCredentialBaseFragment.java
@@ -21,13 +21,21 @@
 import android.app.ActivityManagerNative;
 import android.app.ActivityOptions;
 import android.app.IActivityManager;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentSender;
+import android.graphics.Point;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.os.UserManager;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -80,6 +88,14 @@
                 getActivity().finish();
             }
         });
+        int credentialOwnerUserId = Utils.getCredentialOwnerUserId(
+                getActivity(),
+                Utils.getUserIdFromBundle(
+                        getActivity(),
+                        getActivity().getIntent().getExtras()));
+        if (Utils.isManagedProfile(UserManager.get(getActivity()), credentialOwnerUserId)) {
+            setWorkChallengeBackground(view, credentialOwnerUserId);
+        }
     }
 
     @Override
@@ -155,4 +171,23 @@
             }
         }
     }
+
+    private void setWorkChallengeBackground(View baseView, int userId) {
+        DevicePolicyManager dpm = (DevicePolicyManager) getActivity().getSystemService(
+                Context.DEVICE_POLICY_SERVICE);
+        baseView.setBackground(new ColorDrawable(dpm.getOrganizationColorForUser(userId)));
+        ImageView imageView = (ImageView) baseView.findViewById(R.id.background_image);
+        if (imageView != null) {
+            Drawable image = getResources().getDrawable(R.drawable.work_challenge_background);
+            image.setColorFilter(
+                    getResources().getColor(R.color.confirm_device_credential_transparent_black),
+                    PorterDuff.Mode.DARKEN);
+            imageView.setImageDrawable(image);
+            Point screenSize = new Point();
+            getActivity().getWindowManager().getDefaultDisplay().getSize(screenSize);
+            imageView.setLayoutParams(new FrameLayout.LayoutParams(
+                    ViewGroup.LayoutParams.MATCH_PARENT,
+                    screenSize.y));
+        }
+    }
 }
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index 53555e0..00a68bf 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -111,7 +111,7 @@
             mLockPatternUtils = new LockPatternUtils(getActivity());
             Intent intent = getActivity().getIntent();
             // Only take this argument into account if it belongs to the current profile.
-            mEffectiveUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
+            mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
         }
 
         @Override
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index 6331290..087a0b9 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -116,7 +116,7 @@
             mLockPatternUtils = new LockPatternUtils(getActivity());
             Intent intent = getActivity().getIntent();
             // Only take this argument into account if it belongs to the current profile.
-            mEffectiveUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
+            mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
         }
 
         @Override
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index 0924f99..9d001b4 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -48,7 +48,8 @@
 import com.android.org.bouncycastle.asn1.ASN1InputStream;
 import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
 
-import org.apache.harmony.security.utils.AlgNameMapper;
+import sun.security.util.ObjectIdentifier;
+import sun.security.x509.AlgorithmId;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -217,8 +218,8 @@
         try {
             ASN1InputStream bIn = new ASN1InputStream(new ByteArrayInputStream(keyData));
             PrivateKeyInfo pki = PrivateKeyInfo.getInstance(bIn.readObject());
-            String algId = pki.getAlgorithmId().getAlgorithm().getId();
-            String algName = AlgNameMapper.map2AlgName(algId);
+            String algOid = pki.getAlgorithmId().getAlgorithm().getId();
+            String algName = new AlgorithmId(new ObjectIdentifier(algOid)).getName();
 
             return KeyChain.isBoundKeyAlgorithm(algName);
         } catch (IOException e) {
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 96d0a37..b54c414 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -16,6 +16,7 @@
 
 package com.android.settings;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
@@ -185,6 +186,19 @@
     }
 
     /**
+     * Returns the UserManager for a given context
+     *
+     * @throws IllegalStateException if no UserManager could be retrieved.
+     */
+    public static UserManager getUserManager(Context context) {
+        UserManager um = UserManager.get(context);
+        if (um == null) {
+            throw new IllegalStateException("Unable to load UserManager");
+        }
+        return um;
+    }
+
+    /**
      * Returns true if Monkey is running.
      */
     public static boolean isMonkeyRunning() {
@@ -573,10 +587,24 @@
 
     /**
      * Returns true if the current profile is a managed one.
+     *
+     * @throws IllegalArgumentException if userManager is null.
      */
-    public static boolean isManagedProfile(UserManager userManager) {
-        UserInfo currentUser = userManager.getUserInfo(userManager.getUserHandle());
-        return currentUser.isManagedProfile();
+    public static boolean isManagedProfile(@NonNull UserManager userManager) {
+        return isManagedProfile(userManager, UserHandle.myUserId());
+    }
+
+    /**
+     * Returns true if the userId passed in is a managed profile.
+     *
+     * @throws IllegalArgumentException if userManager is null.
+     */
+    public static boolean isManagedProfile(@NonNull UserManager userManager, int userId) {
+        if (userManager == null) {
+            throw new IllegalArgumentException("userManager must not be null");
+        }
+        UserInfo userInfo = userManager.getUserInfo(userId);
+        return (userInfo != null) ? userInfo.isManagedProfile() : false;
     }
 
     /**
@@ -936,17 +964,17 @@
     }
 
     /**
-     * Returns the user id present in the bundle with {@link ChooseLockGeneric#KEY_USER_ID} if it
+     * Returns the user id present in the bundle with {@link Intent#EXTRA_USER_ID} if it
      * belongs to the current user.
      *
      * @throws SecurityException if the given userId does not belong to the current user group.
      */
-    public static int getSameOwnerUserId(Context context, Bundle bundle) {
+    public static int getUserIdFromBundle(Context context, Bundle bundle) {
         if (bundle == null) {
-            return getEffectiveUserId(context);
+            return getCredentialOwnerUserId(context);
         }
         int userId = bundle.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId());
-        return getSameOwnerUserId(context, userId);
+        return enforceSameOwner(context, userId);
     }
 
     /**
@@ -954,27 +982,28 @@
      *
      * @throws SecurityException if the given userId does not belong to the current user group.
      */
-    public static int getSameOwnerUserId(Context context, int userId) {
-        UserManager um = UserManager.get(context);
-        if (um != null) {
-            if (um.getUserProfiles().contains(new UserHandle(userId))) {
-                return userId;
-            } else {
-                throw new SecurityException("Given user id " + userId + " does not belong to user "
-                        + UserHandle.myUserId());
-            }
+    public static int enforceSameOwner(Context context, int userId) {
+        UserManager um = getUserManager(context);
+        if (!um.getUserProfiles().contains(new UserHandle(userId))) {
+            throw new SecurityException("Given user id " + userId + " does not belong to user "
+                    + UserHandle.myUserId());
         }
-        return getEffectiveUserId(context);
+        return userId;
     }
 
-    public static int getEffectiveUserId(Context context) {
-        UserManager um = UserManager.get(context);
-        if (um != null) {
-            return um.getCredentialOwnerProfile(UserHandle.myUserId());
-        } else {
-            Log.e(TAG, "Unable to acquire UserManager");
-            return UserHandle.myUserId();
-        }
+    /**
+     * Returns the effective credential owner of the calling user.
+     */
+    public static int getCredentialOwnerUserId(Context context) {
+        return getCredentialOwnerUserId(context, UserHandle.myUserId());
+    }
+
+    /**
+     * Returns the user id of the credential owner of the given user id.
+     */
+    public static int getCredentialOwnerUserId(Context context, int userId) {
+        UserManager um = getUserManager(context);
+        return um.getCredentialOwnerProfile(userId);
     }
 
     public static int resolveResource(Context context, int attr) {