More cts-verifier tests for profile-aware Settings.

Also auto-scroll the list of tests as they are growing longer.

Bug: 18928906
Change-Id: I214febc873a21f0ba10a49b3a4e30c4eaf51fd3f
diff --git a/apps/CtsVerifier/res/layout/provisioning_byod.xml b/apps/CtsVerifier/res/layout/provisioning_byod.xml
index 989266f..b1b75ba 100644
--- a/apps/CtsVerifier/res/layout/provisioning_byod.xml
+++ b/apps/CtsVerifier/res/layout/provisioning_byod.xml
@@ -21,8 +21,8 @@
 
     <ScrollView
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_weight="1">
+            android:layout_height="320dp"
+            android:layout_weight="2">
         <TextView
                 android:id="@+id/byod_instructions"
                 android:layout_width="match_parent"
@@ -39,9 +39,10 @@
         android:text="@string/provisioning_byod_start" />
 
     <ListView
-        android:id="@id/android:list"
+        android:id="@+id/android:list"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
+        android:layout_height="wrap_content"
+        android:layout_weight="3" />
 
     <include layout="@layout/pass_fail_buttons" />
 
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index cb0a1d8..fe58016 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -1268,8 +1268,8 @@
     </string>
     <string name="provisioning_byod_profileowner">Profile owner installed</string>
     <string name="provisioning_byod_diskencryption">Full disk encryption enabled</string>
-    <string name="provisioning_byod_profile_visible">Work profile visible in Settings</string>
-    <string name="provisioning_byod_admin_visible">Device administrator visible in Settings</string>
+    <string name="provisioning_byod_profile_visible">Profile-aware accounts settings</string>
+    <string name="provisioning_byod_admin_visible">Profile-aware device administrator settings</string>
     <string name="provisioning_byod_workapps_visible">Badged work apps visible in Launcher</string>
     <string name="provisioning_byod_cross_profile">Open app cross profiles</string>
     <string name="provisioning_byod_cross_profile_app_personal">
@@ -1318,6 +1318,47 @@
         \n
         Then navigate back to this screen using Recents button.
     </string>
+
+    <string name="provisioning_byod_app_settings">Profile-aware app settings</string>
+    <string name="provisioning_byod_app_settings_instruction">
+        Please press the Go button to open Apps page in settings.\n
+        \n
+        Verify that work profile exists in the dropdown list and selecting it will
+        bring up apps setting in the work profile.\n
+        \n
+        Then use the Back button to return to this test and mark accordingly.
+    </string>
+
+    <string name="provisioning_byod_location_settings">Profile-aware location settings</string>
+    <string name="provisioning_byod_location_settings_instruction">
+        Please press the Go button to open Location page in settings.\n
+        \n
+        Verify that work profile entry exists in the page.\n
+        \n
+        Then use the Back button to return to this test and mark accordingly.
+    </string>
+
+    <string name="provisioning_byod_cred_settings">Profile-aware trusted credential settings</string>
+    <string name="provisioning_byod_cred_settings_instruction">
+        Please press the Go button to open the Security settings.
+        Navigate to "Trusted credentials" and wait for the UI to load.
+        After the list is loaded, confirm that:\n
+        \n
+        The page list credentials for both "Personal" and "Work" profiles.\n
+        \n
+        Then use the Back button to return to this test and mark accordingly.
+    </string>
+
+    <string name="provisioning_byod_print_settings">Profile-aware printing settings</string>
+    <string name="provisioning_byod_print_settings_instruction">
+        Please press the Go button to open the Printing settings.
+        \n
+        Verify that work profile exists in the dropdown list and selecting it will
+        bring up printing setting in the work profile.\n
+        \n
+        Then use the Back button to return to this test and mark accordingly.
+    </string>
+
     <string name="provisioning_byod_no_activity">Cannot communicate with activity in the work profile.</string>
     <string name="provisioning_byod_delete_profile">Initiate deletion of work profile.</string>
     <string name="provisioning_byod_profile_deleted">Work profile deleted.</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
index 057d00d..c1cc1f9 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
@@ -17,14 +17,12 @@
 package com.android.cts.verifier.managedprovisioning;
 
 import android.app.AlertDialog;
-import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
 import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.provider.Settings;
@@ -64,20 +62,26 @@
 
     private ComponentName mAdminReceiverComponent;
 
-    private TestAdapter mAdapter;
+    private TestAdapter mTestListAdapter;
     private View mStartProvisioningButton;
     private List<TestItem> mTests = new ArrayList<TestItem>();
 
     protected DevicePolicyManager mDevicePolicyManager;
 
     private TestItem mProfileOwnerInstalled;
-    private TestItem mProfileVisibleTest;
+    private TestItem mProfileAccountVisibleTest;
     private TestItem mDeviceAdminVisibleTest;
     private TestItem mWorkAppVisibleTest;
     private TestItem mCrossProfileIntentFiltersTest;
     private TestItem mDisableNonMarketTest;
     private TestItem mEnableNonMarketTest;
     private TestItem mWorkNotificationBadgedTest;
+    private TestItem mAppSettingsVisibleTest;
+    private TestItem mLocationSettingsVisibleTest;
+    private TestItem mCredSettingsVisibleTest;
+    private TestItem mPrintSettingsVisibleTest;
+
+    private int mCurrentTestPosition;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -94,9 +98,11 @@
 
         setupTests();
 
-        mAdapter = new TestAdapter(this);
-        setListAdapter(mAdapter);
-        mAdapter.addAll(mTests);
+        mTestListAdapter = new TestAdapter(this);
+        setListAdapter(mTestListAdapter);
+        mTestListAdapter.addAll(mTests);
+
+        mCurrentTestPosition = 0;
 
         mStartProvisioningButton = findViewById(R.id.byod_start);
         mStartProvisioningButton.setOnClickListener(new OnClickListener() {
@@ -159,21 +165,13 @@
             }
         };
 
-        mProfileVisibleTest = new TestItem(this, R.string.provisioning_byod_profile_visible,
-                R.string.provisioning_byod_profile_visible_instruction,
-                new Intent(Settings.ACTION_SETTINGS));
-
-        mDeviceAdminVisibleTest = new TestItem(this, R.string.provisioning_byod_admin_visible,
-                R.string.provisioning_byod_admin_visible_instruction,
-                new Intent(Settings.ACTION_SECURITY_SETTINGS));
-
         /*
          * To keep the image in this test up to date, use the instructions in
          * {@link ByodIconSamplerActivity}.
          */
         mWorkAppVisibleTest = new TestItemWithIcon(this,
                 R.string.provisioning_byod_workapps_visible,
-                R.string.provisioning_byod_profile_visible_instruction,
+                R.string.provisioning_byod_workapps_visible_instruction,
                 new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),
                 R.drawable.badged_icon);
 
@@ -193,18 +191,53 @@
                 new Intent(ByodHelperActivity.ACTION_INSTALL_APK)
                         .putExtra(ByodHelperActivity.EXTRA_ALLOW_NON_MARKET_APPS, true));
 
+        mProfileAccountVisibleTest = new TestItem(this, R.string.provisioning_byod_profile_visible,
+                R.string.provisioning_byod_profile_visible_instruction,
+                new Intent(Settings.ACTION_SETTINGS));
+
+        mAppSettingsVisibleTest = new TestItem(this, R.string.provisioning_byod_app_settings,
+                R.string.provisioning_byod_app_settings_instruction,
+                new Intent(Settings.ACTION_APPLICATION_SETTINGS));
+
+        mDeviceAdminVisibleTest = new TestItem(this, R.string.provisioning_byod_admin_visible,
+                R.string.provisioning_byod_admin_visible_instruction,
+                new Intent(Settings.ACTION_SECURITY_SETTINGS));
+
+        mCredSettingsVisibleTest = new TestItem(this, R.string.provisioning_byod_cred_settings,
+                R.string.provisioning_byod_cred_settings_instruction,
+                new Intent(Settings.ACTION_SECURITY_SETTINGS));
+
+        mLocationSettingsVisibleTest = new TestItem(this,
+                R.string.provisioning_byod_location_settings,
+                R.string.provisioning_byod_location_settings_instruction,
+                new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
+
+        mPrintSettingsVisibleTest = new TestItem(this, R.string.provisioning_byod_print_settings,
+                R.string.provisioning_byod_print_settings_instruction,
+                new Intent(Settings.ACTION_PRINT_SETTINGS));
+
         Intent intent = new Intent(CrossProfileTestActivity.ACTION_CROSS_PROFILE);
-        Intent chooser = Intent.createChooser(intent, getResources().getString(R.string.provisioning_cross_profile_chooser));
+        Intent chooser = Intent.createChooser(intent,
+                getResources().getString(R.string.provisioning_cross_profile_chooser));
         mCrossProfileIntentFiltersTest = new TestItem(this,
                 R.string.provisioning_byod_cross_profile,
                 R.string.provisioning_byod_cross_profile_instruction,
                 chooser);
 
         mTests.add(mProfileOwnerInstalled);
-        mTests.add(mProfileVisibleTest);
-        mTests.add(mDeviceAdminVisibleTest);
+
+        // Badge related tests
         mTests.add(mWorkAppVisibleTest);
         mTests.add(mWorkNotificationBadgedTest);
+
+        // Settings related tests.
+        mTests.add(mProfileAccountVisibleTest);
+        mTests.add(mDeviceAdminVisibleTest);
+        mTests.add(mCredSettingsVisibleTest);
+        mTests.add(mAppSettingsVisibleTest);
+        mTests.add(mLocationSettingsVisibleTest);
+        mTests.add(mPrintSettingsVisibleTest);
+
         mTests.add(mCrossProfileIntentFiltersTest);
         mTests.add(mDisableNonMarketTest);
         mTests.add(mEnableNonMarketTest);
@@ -213,6 +246,7 @@
     @Override
     protected void onListItemClick(ListView l, View v, int position, long id) {
         super.onListItemClick(l, v, position, id);
+        mCurrentTestPosition = position;
         TestItem test = (TestItem) getListAdapter().getItem(position);
         test.performTest(this);
     }
@@ -242,13 +276,20 @@
         } else {
             dialogBuilder.setMessage(test.getManualTestInstruction());
         }
-        AlertDialog dialog = dialogBuilder.show();
+        final AlertDialog dialog = dialogBuilder.show();
         // Note: Setting the OnClickListener on the Dialog rather than the Builder, prevents the
         // dialog being dismissed on onClick.
         dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
-                ByodFlowTestActivity.this.startActivity(test.getManualTestIntent());
+                try {
+                    ByodFlowTestActivity.this.startActivity(test.getManualTestIntent());
+                } catch (ActivityNotFoundException e) {
+                    Toast.makeText(ByodFlowTestActivity.this,
+                            "Cannot start " + test.getManualTestIntent(), Toast.LENGTH_LONG).show();
+                    setTestResult(test, TestResult.Failed);
+                    dialog.dismiss();
+                }
             }
         });
     }
@@ -256,8 +297,12 @@
     private void clearRemainingState(final TestItem test) {
         if (WorkNotificationTestActivity.ACTION_WORK_NOTIFICATION.equals(
                 test.getManualTestIntent().getAction())) {
-            ByodFlowTestActivity.this.startActivity(new Intent(
-                    WorkNotificationTestActivity.ACTION_CLEAR_WORK_NOTIFICATION));
+            try {
+                ByodFlowTestActivity.this.startActivity(new Intent(
+                        WorkNotificationTestActivity.ACTION_CLEAR_WORK_NOTIFICATION));
+            } catch (ActivityNotFoundException e) {
+                // User shouldn't run this test before work profile is set up.
+            }
         }
     }
 
@@ -269,7 +314,9 @@
             testSucceeds &= (aTest.getPassFailState() == TestResult.Passed);
         }
         getPassButton().setEnabled(testSucceeds);
-        mAdapter.notifyDataSetChanged();
+        mTestListAdapter.notifyDataSetChanged();
+
+        this.getListView().smoothScrollToPosition(mCurrentTestPosition + 1);
     }
 
     private void startByodProvisioning() {