Extend CTSVerifier tests to test for badges
Bug: 18339619
Change-Id: Ifb310c9fe08c340dd9488da661353d6c9a1e0bbf
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 5d37386..1afa9af 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -1402,6 +1402,14 @@
</intent-filter>
</activity>
+ <activity android:name=".managedprovisioning.WorkNotificationTestActivity">
+ <intent-filter>
+ <action android:name="com.android.cts.verifier.managedprovisioning.WORK_NOTIFICATION" />
+ <action android:name="com.android.cts.verifier.managedprovisioning.CLEAR_WORK_NOTIFICATION" />
+ <category android:name="android.intent.category.DEFAULT"></category>
+ </intent-filter>
+ </activity>
+
<receiver android:name=".managedprovisioning.DeviceAdminTestReceiver"
android:label="@string/provisioning_byod_device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN">
diff --git a/apps/CtsVerifier/res/drawable-hdpi/ic_corp_icon.png b/apps/CtsVerifier/res/drawable-hdpi/ic_corp_icon.png
new file mode 100644
index 0000000..06c5135
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable-hdpi/ic_corp_icon.png
Binary files differ
diff --git a/apps/CtsVerifier/res/drawable-mdpi/ic_corp_icon.png b/apps/CtsVerifier/res/drawable-mdpi/ic_corp_icon.png
new file mode 100644
index 0000000..79372b2
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable-mdpi/ic_corp_icon.png
Binary files differ
diff --git a/apps/CtsVerifier/res/drawable-xhdpi/ic_corp_icon.png b/apps/CtsVerifier/res/drawable-xhdpi/ic_corp_icon.png
new file mode 100644
index 0000000..3626c7d
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable-xhdpi/ic_corp_icon.png
Binary files differ
diff --git a/apps/CtsVerifier/res/drawable-xxhdpi/ic_corp_icon.png b/apps/CtsVerifier/res/drawable-xxhdpi/ic_corp_icon.png
new file mode 100644
index 0000000..d33319f
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable-xxhdpi/ic_corp_icon.png
Binary files differ
diff --git a/apps/CtsVerifier/res/drawable-xxxhdpi/ic_corp_icon.png b/apps/CtsVerifier/res/drawable-xxxhdpi/ic_corp_icon.png
new file mode 100644
index 0000000..359e210
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable-xxxhdpi/ic_corp_icon.png
Binary files differ
diff --git a/apps/CtsVerifier/res/layout/byod_custom_view_badged_icons.xml b/apps/CtsVerifier/res/layout/byod_custom_view.xml
similarity index 89%
rename from apps/CtsVerifier/res/layout/byod_custom_view_badged_icons.xml
rename to apps/CtsVerifier/res/layout/byod_custom_view.xml
index 1a29f65..00c9ad9 100644
--- a/apps/CtsVerifier/res/layout/byod_custom_view_badged_icons.xml
+++ b/apps/CtsVerifier/res/layout/byod_custom_view.xml
@@ -28,12 +28,10 @@
<TextView android:id="@+id/message"
style="@style/InstructionsSmallFont"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/provisioning_byod_workapps_visible_instruction" />
+ android:layout_height="wrap_content" />
</ScrollView>
<ImageView android:id="@+id/sample_icon"
- android:src="@drawable/badged_icon"
android:layout_width="56dip"
android:layout_height="56dip"
android:layout_gravity="center_horizontal" />
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 24dbc45..cb0a1d8 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -1284,6 +1284,13 @@
\n
Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
</string>
+ <string name="provisioning_byod_work_notification">Work notification is badged</string>
+ <string name="provisioning_byod_work_notification_instruction">
+ Please press the Go button to trigger a notification.\n
+ \n
+ Verify that the notification is badged (see sample badge below). Then mark this test accordingly.
+ </string>
+ <string name="provisioning_byod_work_notification_title">This is a work notification</string>
<string name="provisioning_byod_profile_visible_instruction">
Please press the Go button to open the Settings page.
Navigate to Accounts and confirm that:\n
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 12aa37b..057d00d 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestActivity.java
@@ -77,6 +77,7 @@
private TestItem mCrossProfileIntentFiltersTest;
private TestItem mDisableNonMarketTest;
private TestItem mEnableNonMarketTest;
+ private TestItem mWorkNotificationBadgedTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -170,16 +171,17 @@
* To keep the image in this test up to date, use the instructions in
* {@link ByodIconSamplerActivity}.
*/
- mWorkAppVisibleTest = new TestItem(this, R.string.provisioning_byod_workapps_visible,
+ mWorkAppVisibleTest = new TestItemWithIcon(this,
+ R.string.provisioning_byod_workapps_visible,
R.string.provisioning_byod_profile_visible_instruction,
- new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)) {
- @Override
- public View getCustomView() {
- LayoutInflater layoutInflater = LayoutInflater.from(getApplicationContext());
- return layoutInflater.inflate(R.layout.byod_custom_view_badged_icons,
- null /* root */);
- }
- };
+ new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),
+ R.drawable.badged_icon);
+
+ mWorkNotificationBadgedTest = new TestItemWithIcon(this,
+ R.string.provisioning_byod_work_notification,
+ R.string.provisioning_byod_work_notification_instruction,
+ new Intent(WorkNotificationTestActivity.ACTION_WORK_NOTIFICATION),
+ R.drawable.ic_corp_icon);
mDisableNonMarketTest = new TestItem(this, R.string.provisioning_byod_nonmarket_deny,
R.string.provisioning_byod_nonmarket_deny_info,
@@ -202,6 +204,7 @@
mTests.add(mProfileVisibleTest);
mTests.add(mDeviceAdminVisibleTest);
mTests.add(mWorkAppVisibleTest);
+ mTests.add(mWorkNotificationBadgedTest);
mTests.add(mCrossProfileIntentFiltersTest);
mTests.add(mDisableNonMarketTest);
mTests.add(mEnableNonMarketTest);
@@ -222,12 +225,14 @@
.setPositiveButton(R.string.pass_button_text, new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
+ clearRemainingState(test);
setTestResult(test, TestResult.Passed);
}
})
.setNegativeButton(R.string.fail_button_text, new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
+ clearRemainingState(test);
setTestResult(test, TestResult.Failed);
}
});
@@ -248,6 +253,14 @@
});
}
+ 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));
+ }
+ }
+
private void setTestResult(TestItem test, TestResult result) {
test.setPassFailState(result);
@@ -306,6 +319,10 @@
this, ByodHelperActivity.class),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
+ getPackageManager().setComponentEnabledSetting(new ComponentName(
+ this, WorkNotificationTestActivity.class),
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
}
private void showToast(int messageId) {
@@ -375,6 +392,29 @@
}
}
+ static class TestItemWithIcon extends TestItem {
+
+ private int mImageResId;
+ private Context mContext;
+
+ public TestItemWithIcon(Context context, int nameResId, int testInstructionResId,
+ Intent testIntent, int imageResId) {
+ super(context, nameResId, testInstructionResId, testIntent);
+ mContext = context;
+ mImageResId = imageResId;
+ }
+
+ @Override
+ public View getCustomView() {
+ LayoutInflater layoutInflater = LayoutInflater.from(mContext);
+ View view = layoutInflater.inflate(R.layout.byod_custom_view,
+ null /* root */);
+ ((ImageView) view.findViewById(R.id.sample_icon)).setImageResource(mImageResId);
+ ((TextView) view.findViewById(R.id.message)).setText(getManualTestInstruction());
+ return view;
+ }
+ }
+
static class TestAdapter extends ArrayAdapter<TestItem> {
public TestAdapter(Context context) {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceAdminTestReceiver.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceAdminTestReceiver.java
index 1f78daf..fa7bc4c 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceAdminTestReceiver.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceAdminTestReceiver.java
@@ -26,8 +26,6 @@
import android.util.Log;
import android.widget.Toast;
-import com.android.cts.verifier.managedprovisioning.ByodHelperActivity;
-
/**
* Profile owner receiver for BYOD flow test.
* Setup cross-profile intent filter after successful provisioning.
@@ -52,6 +50,8 @@
filter.addAction(ByodHelperActivity.ACTION_REMOVE_PROFILE_OWNER);
filter.addAction(ByodHelperActivity.ACTION_INSTALL_APK);
filter.addAction(CrossProfileTestActivity.ACTION_CROSS_PROFILE);
+ filter.addAction(WorkNotificationTestActivity.ACTION_WORK_NOTIFICATION);
+ filter.addAction(WorkNotificationTestActivity.ACTION_CLEAR_WORK_NOTIFICATION);
dpm.addCrossProfileIntentFilter(getWho(context), filter,
DevicePolicyManager.FLAG_MANAGED_CAN_ACCESS_PARENT);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/WorkNotificationTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/WorkNotificationTestActivity.java
new file mode 100644
index 0000000..c85ccf5
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/WorkNotificationTestActivity.java
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+package com.android.cts.verifier.managedprovisioning;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.android.cts.verifier.R;
+
+/**
+ * Test activity used to generate a notification.
+ */
+public class WorkNotificationTestActivity extends Activity {
+ public static final String ACTION_WORK_NOTIFICATION =
+ "com.android.cts.verifier.managedprovisioning.WORK_NOTIFICATION";
+ public static final String ACTION_CLEAR_WORK_NOTIFICATION =
+ "com.android.cts.verifier.managedprovisioning.CLEAR_WORK_NOTIFICATION";
+ private static final int NOTIFICATION_ID = 7;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final String action = getIntent().getAction();
+ final NotificationManager notificationManager = (NotificationManager)
+ getSystemService(Context.NOTIFICATION_SERVICE);
+ if (ACTION_WORK_NOTIFICATION.equals(action)) {
+ final Notification notification = new Notification.Builder(this)
+ .setSmallIcon(R.drawable.icon)
+ .setContentTitle(getString(R.string.provisioning_byod_work_notification_title))
+ .setVisibility(Notification.VISIBILITY_PUBLIC)
+ .setAutoCancel(true)
+ .build();
+ notificationManager.notify(NOTIFICATION_ID, notification);
+ } else if (ACTION_CLEAR_WORK_NOTIFICATION.equals(action)) {
+ notificationManager.cancel(NOTIFICATION_ID);
+ }
+ finish();
+ }
+}