Add policy disclosure for printing.

Bug: 64140119
Test: make -j40 RunSettingsRoboTests
Change-Id: Ib453c492f1dc9e6f9bd4019104dfd3eafcd0a8b4
diff --git a/res/xml/connected_devices_advanced.xml b/res/xml/connected_devices_advanced.xml
index a5d48fd..36eab22 100644
--- a/res/xml/connected_devices_advanced.xml
+++ b/res/xml/connected_devices_advanced.xml
@@ -50,7 +50,7 @@
         settings:controller="com.android.settings.connecteddevice.BluetoothOnWhileDrivingPreferenceController"
         android:order="-2"/>
 
-    <Preference
+    <com.android.settingslib.RestrictedPreference
         android:key="connected_device_printing"
         android:title="@string/print_settings"
         android:summary="@string/summary_placeholder"
diff --git a/src/com/android/settings/print/PrintSettingPreferenceController.java b/src/com/android/settings/print/PrintSettingPreferenceController.java
index bb8a81e..1f85c4c 100644
--- a/src/com/android/settings/print/PrintSettingPreferenceController.java
+++ b/src/com/android/settings/print/PrintSettingPreferenceController.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.UserManager;
 import android.print.PrintJob;
 import android.print.PrintJobId;
 import android.print.PrintJobInfo;
@@ -29,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.wrapper.PrintManagerWrapper;
+import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -41,12 +43,14 @@
 public class PrintSettingPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart, OnStop, PrintManager.PrintJobStateChangeListener {
 
+    private static final String KEY_PRINTING_SETTINGS = "connected_device_printing";
+
     private final PackageManager mPackageManager;
     private PrintManagerWrapper mPrintManager;
     private Preference mPreference;
 
     public PrintSettingPreferenceController(Context context) {
-        super(context, "connected_device_printing" /* preferenceKey */);
+        super(context, KEY_PRINTING_SETTINGS);
         mPackageManager = context.getPackageManager();
         mPrintManager = new PrintManagerWrapper(context);
     }
@@ -84,6 +88,8 @@
             return;
         }
         preference.setSummary(getSummary());
+        ((RestrictedPreference) preference).checkRestrictionAndSetDisabled(
+                UserManager.DISALLOW_PRINTING);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
index de1625b..bf4733a 100644
--- a/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/print/PrintSettingsPreferenceControllerTest.java
@@ -20,26 +20,29 @@
 import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.arch.lifecycle.LifecycleOwner;
 import android.content.Context;
+import android.os.UserManager;
 import android.print.PrintJob;
 import android.print.PrintJobInfo;
 import android.print.PrintManager;
 import android.printservice.PrintServiceInfo;
-import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.wrapper.PrintManagerWrapper;
+import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
@@ -57,8 +60,11 @@
 
     @Mock
     private PrintManagerWrapper mPrintManager;
+    @Mock
+    private UserManager mUserManager;
     private Context mContext;
-    private Preference mPreference;
+    @Mock
+    private RestrictedPreference mPreference;
     private PrintSettingPreferenceController mController;
     private LifecycleOwner mLifecycleOwner;
     private Lifecycle mLifecycle;
@@ -66,8 +72,9 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mPreference = new Preference(mContext);
+        mContext = spy(RuntimeEnvironment.application);
+        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+        mPreference = spy(new RestrictedPreference(mContext));
         mController = new PrintSettingPreferenceController(mContext);
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
@@ -122,4 +129,10 @@
         assertThat(mPreference.getSummary())
                 .isEqualTo(mContext.getString(R.string.print_settings_summary_no_service));
     }
+
+    @Test
+    public void updateState_shouldCheckRestriction() {
+        mController.updateState(mPreference);
+        verify(mPreference).checkRestrictionAndSetDisabled(UserManager.DISALLOW_PRINTING);
+    }
 }