Merge "DO NOT MERGE: Update BatteryStatsValidationTest skip checks" into pie-cts-dev
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 9910810..ce2dc33 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -1965,7 +1965,7 @@
</intent-filter>
<meta-data android:name="test_category" android:value="@string/test_category_notifications" />
<meta-data android:name="test_excluded_features"
- android:value="android.hardware.type.television:android.software.leanback:android.hardware.type.watch" />
+ android:value="android.hardware.type.automotive:android.hardware.type.television:android.software.leanback:android.hardware.type.watch" />
</activity>
<activity android:name=".notifications.AttentionManagementVerifierActivity"
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationListenerVerifierActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationListenerVerifierActivity.java
index 6a3678d..2fd2521 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationListenerVerifierActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/notifications/NotificationListenerVerifierActivity.java
@@ -42,6 +42,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.Secure;
@@ -121,8 +122,10 @@
tests.add(new EnableHintsTest());
tests.add(new ReceiveAppBlockNoticeTest());
tests.add(new ReceiveAppUnblockNoticeTest());
- tests.add(new ReceiveChannelBlockNoticeTest());
- tests.add(new ReceiveGroupBlockNoticeTest());
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
+ tests.add(new ReceiveChannelBlockNoticeTest());
+ tests.add(new ReceiveGroupBlockNoticeTest());
+ }
tests.add(new RequestUnbindTest());
tests.add(new RequestBindTest());
tests.add(new MessageBundleTest());
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
index e04bf0a..d4abbf1 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
@@ -71,6 +71,18 @@
mBuildHelper = new CompatibilityBuildHelper(buildInfo);
}
+ /**
+ * Approve the review permission prompt
+ */
+ private void approveReviewPermissionDialog() throws Exception {
+ assertNull(getDevice().installPackage(
+ mBuildHelper.getTestFile("ReviewPermissionHelper.apk"), true, true));
+
+ runDeviceTests("com.android.cts.reviewpermissionhelper",
+ "com.android.cts.reviewpermissionhelper.ReviewPermissionsTest",
+ "approveReviewPermissions");
+ }
+
@Override
protected void setUp() throws Exception {
super.setUp();
@@ -139,12 +151,18 @@
public void testCompatDefault22() throws Exception {
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_22), false, false));
+
+ approveReviewPermissionDialog();
+
runDeviceTests(USES_PERMISSION_PKG, "com.android.cts.usepermission.UsePermissionTest22",
"testCompatDefault");
}
public void testCompatRevoked22() throws Exception {
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_22), false, false));
+
+ approveReviewPermissionDialog();
+
boolean didThrow = false;
try {
runDeviceTests(USES_PERMISSION_PKG, "com.android.cts.usepermission.UsePermissionTest22",
@@ -161,6 +179,9 @@
public void testNoRuntimePrompt22() throws Exception {
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_22), false, false));
+
+ approveReviewPermissionDialog();
+
runDeviceTests(USES_PERMISSION_PKG, "com.android.cts.usepermission.UsePermissionTest22",
"testNoRuntimePrompt");
}
@@ -284,6 +305,9 @@
public void testUpgradeKeepsPermissions() throws Exception {
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_22), false, false));
+
+ approveReviewPermissionDialog();
+
runDeviceTests(USES_PERMISSION_PKG, "com.android.cts.usepermission.UsePermissionTest22",
"testAllPermissionsGrantedByDefault");
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_23), true, false));
@@ -316,6 +340,9 @@
public void testRevokePropagatedOnUpgradeOldToNewModel() throws Exception {
assertNull(getDevice().installPackage(mBuildHelper.getTestFile(APK_22), false, false));
+
+ approveReviewPermissionDialog();
+
boolean didThrow = false;
try {
runDeviceTests(USES_PERMISSION_PKG, "com.android.cts.usepermission.UsePermissionTest22",
diff --git a/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/Android.mk b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/Android.mk
new file mode 100644
index 0000000..182ff82
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/Android.mk
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2019 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.
+#
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ androidx.test.rules \
+ android-support-test \
+ compatibility-device-util-axt \
+ ub-uiautomator
+
+LOCAL_JAVA_LIBRARIES := android.test.base.stubs
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := ReviewPermissionHelper
+LOCAL_PRIVATE_PLATFORM_APIS := true
+
+# tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_PROGUARD_ENABLED := disabled
+LOCAL_DEX_PREOPT := false
+
+include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/AndroidManifest.xml
new file mode 100644
index 0000000..f5cc0d0
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.cts.reviewpermissionhelper">
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation
+ android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.cts.reviewpermissionhelper" />
+
+</manifest>
diff --git a/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/src/com/android/cts/reviewpermissionhelper/ReviewPermissionsTest.java b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/src/com/android/cts/reviewpermissionhelper/ReviewPermissionsTest.java
new file mode 100644
index 0000000..d2ff472
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/ReviewPermissionHelper/src/com/android/cts/reviewpermissionhelper/ReviewPermissionsTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2018 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.reviewpermissionhelper;
+
+import android.app.Instrumentation;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.BySelector;
+import android.support.test.uiautomator.Direction;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject2;
+import android.support.test.uiautomator.Until;
+import android.widget.ListView;
+import android.widget.Switch;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public final class ReviewPermissionsTest {
+ private static final long UI_TIMEOUT = 5000L;
+ private static final BySelector CONTINUE_BUTTON = By.text("Continue");
+
+ @Test
+ public void approveReviewPermissions() throws Exception {
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+ PackageManager packageManager = instrumentation.getTargetContext().getPackageManager();
+ boolean isWatch = packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH);
+ if (!isWatch || !packageManager.isPermissionReviewModeEnabled()) return;
+
+ Intent startAutoClosingActivity = new Intent();
+ startAutoClosingActivity.setComponent(
+ new ComponentName(
+ "com.android.cts.usepermission",
+ "com.android.cts.usepermission.AutoClosingActivity"));
+ startAutoClosingActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ instrumentation.getTargetContext().startActivity(startAutoClosingActivity);
+
+ UiDevice device = UiDevice.getInstance(instrumentation);
+
+ UiObject2 listView = device.wait(Until.findObject(By.clazz(ListView.class)), UI_TIMEOUT);
+ List<UiObject2> permissionSwitches = new ArrayList<>();
+ UiObject2 continueButton;
+ do {
+ permissionSwitches = device.findObjects(By.clazz(Switch.class).checked(false));
+ for (UiObject2 permissionSwitch : permissionSwitches) {
+ permissionSwitch.click();
+ }
+ listView.scroll(Direction.DOWN, 0.5f);
+ continueButton = device.findObject(CONTINUE_BUTTON);
+ } while (!permissionSwitches.isEmpty() || continueButton == null);
+ device.wait(Until.findObject(CONTINUE_BUTTON), UI_TIMEOUT).click();
+ }
+}
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp22/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/AndroidManifest.xml
index 1424c7c..f87a7da 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp22/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/AndroidManifest.xml
@@ -68,6 +68,7 @@
<application>
<uses-library android:name="android.test.runner" />
<activity android:name=".BasePermissionActivity" />
+ <activity android:name=".AutoClosingActivity" android:exported="true" />
</application>
<instrumentation
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp22/src/com/android/cts/usepermission/AutoClosingActivity.java b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/src/com/android/cts/usepermission/AutoClosingActivity.java
new file mode 100644
index 0000000..5ee3aeb
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/src/com/android/cts/usepermission/AutoClosingActivity.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2018 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.usepermission;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class AutoClosingActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ finish();
+ }
+}
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/BasePermissionsTest.java b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/BasePermissionsTest.java
old mode 100755
new mode 100644
index 68ec7cc..eb942a3
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/BasePermissionsTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/BasePermissionsTest.java
@@ -33,6 +33,7 @@
import android.os.SystemClock;
import android.provider.Settings;
import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.Direction;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObject2;
@@ -45,6 +46,7 @@
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
import android.widget.ScrollView;
+import android.widget.ListView;
import android.widget.Switch;
import androidx.test.InstrumentationRegistry;
@@ -294,25 +296,33 @@
protected void clickAllowButton() throws Exception {
scrollToBottomIfWatch();
- getUiDevice().findObject(new UiSelector().resourceId(
- "com.android.packageinstaller:id/permission_allow_button")).click();
+ getUiDevice().wait(
+ Until.findObject(
+ By.res("com.android.packageinstaller:id/permission_allow_button")),
+ GLOBAL_TIMEOUT_MILLIS).click();
}
protected void clickDenyButton() throws Exception {
scrollToBottomIfWatch();
- getUiDevice().findObject(new UiSelector().resourceId(
- "com.android.packageinstaller:id/permission_deny_button")).click();
+ getUiDevice().wait(
+ Until.findObject(
+ By.res("com.android.packageinstaller:id/permission_deny_button")),
+ GLOBAL_TIMEOUT_MILLIS).click();
}
protected void clickDontAskAgainCheckbox() throws Exception {
- getUiDevice().findObject(new UiSelector().resourceId(
- "com.android.packageinstaller:id/do_not_ask_checkbox")).click();
+ getUiDevice().wait(
+ Until.findObject(
+ By.res("com.android.packageinstaller:id/do_not_ask_checkbox")),
+ GLOBAL_TIMEOUT_MILLIS).click();
}
protected void clickDontAskAgainButton() throws Exception {
scrollToBottomIfWatch();
- getUiDevice().findObject(new UiSelector().resourceId(
- "com.android.packageinstaller:id/permission_deny_dont_ask_again_button")).click();
+ getUiDevice().wait(
+ Until.findObject(
+ By.res("com.android.packageinstaller:id/permission_deny_dont_ask_again_button")),
+ GLOBAL_TIMEOUT_MILLIS).click();
}
protected void grantPermission(String permission) throws Exception {
@@ -333,12 +343,9 @@
private void scrollToBottomIfWatch() throws Exception {
if (mWatch) {
- getUiDevice().wait(Until.findObject(By.clazz(ScrollView.class)), GLOBAL_TIMEOUT_MILLIS);
- UiScrollable scrollable =
- new UiScrollable(new UiSelector().className(ScrollView.class));
- if (scrollable.exists()) {
- scrollable.flingToEnd(10);
- }
+ UiObject2 scrollable = getUiDevice().wait(
+ Until.findObject(By.clazz(ScrollView.class)), GLOBAL_TIMEOUT_MILLIS);
+ if (scrollable != null) scrollable.fling(Direction.DOWN);
}
}
@@ -395,11 +402,18 @@
// Toggle the permission
boolean willShowPopup = (wasGranted && legacyApp);
-
- if (!itemView.getActionList().contains(AccessibilityAction.ACTION_CLICK)) {
- click(toggleView, willShowPopup);
+ if (mWatch) {
+ if (!itemView.getActionList().contains(AccessibilityAction.ACTION_CLICK)) {
+ toggleView.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+ } else {
+ itemView.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+ }
} else {
- click(itemView, willShowPopup);
+ if (!itemView.getActionList().contains(AccessibilityAction.ACTION_CLICK)) {
+ click(toggleView, willShowPopup);
+ } else {
+ click(itemView, willShowPopup);
+ }
}
waitForIdle();
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/UsePermissionTest23.java b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/UsePermissionTest23.java
index 79c03fb..5ddd2da 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/UsePermissionTest23.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/src/com/android/cts/usepermission/UsePermissionTest23.java
@@ -489,7 +489,20 @@
@Test
public void testNoResidualPermissionsOnUninstall_part1() throws Exception {
// Grant all permissions
- grantPermissions(new String[] {
+ String[] permissions;
+ if (mWatch) {
+ // The permission labels of READ_SMS and CALL_PHONE are too long to display on watches,
+ // and thus they got truncated there and can't be matched by grantPermissions().
+ permissions = new String[] {
+ Manifest.permission.WRITE_CALENDAR,
+ Manifest.permission.WRITE_CONTACTS,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.RECORD_AUDIO,
+ Manifest.permission.BODY_SENSORS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.CAMERA};
+ } else {
+ permissions = new String[] {
Manifest.permission.WRITE_CALENDAR,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
@@ -498,8 +511,9 @@
Manifest.permission.RECORD_AUDIO,
Manifest.permission.BODY_SENSORS,
Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.CAMERA
- });
+ Manifest.permission.CAMERA};
+ }
+ grantPermissions(permissions);
}
@Test
@@ -656,8 +670,9 @@
private void assertPermissionsGrantState(String[] permissions, int grantState) {
for (String permission : permissions) {
- assertEquals(grantState, getInstrumentation().getContext()
- .checkSelfPermission(permission));
+ assertEquals(
+ "Permission [" + permission + "]", grantState,
+ getInstrumentation().getContext().checkSelfPermission(permission));
}
}
diff --git a/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/BaseShortcutManagerHostTest.java b/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/BaseShortcutManagerHostTest.java
index 863f51b..0931792 100644
--- a/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/BaseShortcutManagerHostTest.java
+++ b/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/BaseShortcutManagerHostTest.java
@@ -50,6 +50,7 @@
protected boolean mIsMultiuserSupported;
protected boolean mIsManagedUserSupported;
+ private int mInitialUserId;
private ArrayList<Integer> mOriginalUsers;
@Override
@@ -72,6 +73,7 @@
}
if (mIsMultiuserSupported) {
+ mInitialUserId = getDevice().getCurrentUser();
mOriginalUsers = new ArrayList<>(getDevice().listUsers());
}
}
@@ -183,7 +185,7 @@
if (!mIsMultiuserSupported) {
return;
}
- getDevice().switchUser(getPrimaryUserId());
+ getDevice().switchUser(mInitialUserId);
for (int userId : getDevice().listUsers()) {
if (!mOriginalUsers.contains(userId)) {
getDevice().removeUser(userId);
@@ -191,6 +193,18 @@
}
}
+ protected int getOrCreateSecondaryUser() throws Exception {
+ if (getDevice().isUserSecondary(mInitialUserId)) {
+ return mInitialUserId;
+ }
+ for (int userId : getDevice().listUsers()) {
+ if (getDevice().isUserSecondary(userId)) {
+ return userId;
+ }
+ }
+ return createUser();
+ }
+
protected int createUser() throws Exception{
return getDevice().createUser("TestUser_" + System.currentTimeMillis());
}
diff --git a/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/ShortcutManagerMultiuserTest.java b/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/ShortcutManagerMultiuserTest.java
index 72c6a44..9549eb0 100644
--- a/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/ShortcutManagerMultiuserTest.java
+++ b/hostsidetests/shortcuts/hostside/src/android/content/pm/cts/shortcuthost/ShortcutManagerMultiuserTest.java
@@ -62,7 +62,7 @@
if (!mIsMultiuserSupported) {
return;
}
- final int secondUserID = createUser();
+ final int secondUserID = getOrCreateSecondaryUser();
getDevice().startUser(secondUserID);
getDevice().switchUser(secondUserID);
diff --git a/hostsidetests/statsd/src/android/cts/statsd/atom/HostAtomTests.java b/hostsidetests/statsd/src/android/cts/statsd/atom/HostAtomTests.java
index 34adcd1..c0663ad 100644
--- a/hostsidetests/statsd/src/android/cts/statsd/atom/HostAtomTests.java
+++ b/hostsidetests/statsd/src/android/cts/statsd/atom/HostAtomTests.java
@@ -44,6 +44,7 @@
private static final String TAG = "Statsd.HostAtomTests";
+ private static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
private static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
private static final String FEATURE_WIFI = "android.hardware.wifi";
private static final String FEATURE_TELEPHONY = "android.hardware.telephony";
@@ -111,6 +112,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
// Setup, set charging state to full.
setChargingState(5);
Thread.sleep(WAIT_TIME_SHORT);
@@ -163,6 +165,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
// Setup, unplug device.
unplugDevice();
Thread.sleep(WAIT_TIME_SHORT);
@@ -215,6 +218,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
// Setup, set battery level to full.
setBatteryLevel(100);
Thread.sleep(WAIT_TIME_SHORT);
@@ -301,6 +305,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
// Setup, turn off battery saver.
turnBatterySaverOff();
Thread.sleep(WAIT_TIME_SHORT);
@@ -338,6 +343,7 @@
return;
}
if (!hasFeature(FEATURE_WATCH, false)) return;
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
if (!hasBattery()) return;
StatsdConfig.Builder config = getPulledConfig();
FieldMatcher.Builder dimension = FieldMatcher.newBuilder()
@@ -366,6 +372,7 @@
return;
}
if (!hasFeature(FEATURE_WATCH, false)) return;
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
if (!hasBattery()) return;
StatsdConfig.Builder config = getPulledConfig();
FieldMatcher.Builder dimension = FieldMatcher.newBuilder()
diff --git a/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java b/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
index c937e30..ff50691 100644
--- a/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
+++ b/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
@@ -61,6 +61,7 @@
private static final String TAG = "Statsd.UidAtomTests";
// These constants are those in PackageManager.
+ private static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
private static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
private static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
private static final String FEATURE_WIFI = "android.hardware.wifi";
@@ -550,6 +551,9 @@
if (statsdDisabled()) {
return;
}
+ // For automotive, all wakeup alarm becomes normal alarm. So this
+ // test does not work.
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
final int atomTag = Atom.WAKEUP_ALARM_OCCURRED_FIELD_NUMBER;
StatsdConfig.Builder config = createConfigBuilder();
diff --git a/hostsidetests/statsd/src/android/cts/statsd/validation/ValidationTests.java b/hostsidetests/statsd/src/android/cts/statsd/validation/ValidationTests.java
index 8fe6965..5eb19c3 100644
--- a/hostsidetests/statsd/src/android/cts/statsd/validation/ValidationTests.java
+++ b/hostsidetests/statsd/src/android/cts/statsd/validation/ValidationTests.java
@@ -63,6 +63,7 @@
public class ValidationTests extends DeviceAtomTestCase {
private static final String TAG = "Statsd.ValidationTests";
+ private static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
private static final boolean ENABLE_LOAD_TEST = false;
@Override
@@ -81,6 +82,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
resetBatteryStats();
unplugDevice();
// AoD needs to be turned off because the screen should go into an off state. But, if AoD is
@@ -146,6 +148,7 @@
if (statsdDisabled()) {
return;
}
+ if (!hasFeature(FEATURE_AUTOMOTIVE, false)) return;
turnScreenOn(); // To ensure that the ScreenOff later gets logged.
// AoD needs to be turned off because the screen should go into an off state. But, if AoD is
// on and the device doesn't support STATE_DOZE, the screen sadly goes back to STATE_ON.
diff --git a/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java b/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
index 4ce31a3..9edfd09 100644
--- a/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
+++ b/tests/app/src/android/app/cts/ActivityManagerProcessStateTest.java
@@ -1129,6 +1129,10 @@
appInfo.uid, ActivityManager.RunningAppProcessInfo.IMPORTANCE_CANT_SAVE_STATE-1,
WAIT_TIME);
uidBackgroundListener.register();
+ UidImportanceListener uidCachedListener = new UidImportanceListener(mContext,
+ appInfo.uid, ActivityManager.RunningAppProcessInfo.IMPORTANCE_CANT_SAVE_STATE + 1,
+ WAIT_TIME);
+ uidCachedListener.register();
WatchUidRunner uidWatcher = new WatchUidRunner(getInstrumentation(), appInfo.uid,
WAIT_TIME);
@@ -1202,7 +1206,7 @@
am.getPackageImportance(CANT_SAVE_STATE_1_PACKAGE_NAME));
uidWatcher.expect(WatchUidRunner.CMD_CACHED, null);
- uidWatcher.expect(WatchUidRunner.CMD_PROCSTATE, WatchUidRunner.STATE_CACHED_RECENT);
+ uidWatcher.waitFor(WatchUidRunner.CMD_PROCSTATE, WatchUidRunner.STATE_CACHED_RECENT);
// While in background, should go in to normal idle state.
// Force app to go idle now
@@ -1214,6 +1218,7 @@
uidWatcher.finish();
uidForegroundListener.unregister();
uidBackgroundListener.unregister();
+ uidCachedListener.unregister();
}
}
@@ -1358,7 +1363,7 @@
getInstrumentation().getUiAutomation().performGlobalAction(
AccessibilityService.GLOBAL_ACTION_BACK);
uid1Watcher.expect(WatchUidRunner.CMD_CACHED, null);
- uid1Watcher.expect(WatchUidRunner.CMD_PROCSTATE, WatchUidRunner.STATE_CACHED_RECENT);
+ uid1Watcher.waitFor(WatchUidRunner.CMD_PROCSTATE, WatchUidRunner.STATE_CACHED_RECENT);
// Make both apps idle for cleanliness.
cmd = "am make-uid-idle " + CANT_SAVE_STATE_1_PACKAGE_NAME;
diff --git a/tests/signature/api-check/system-annotation/AndroidTest.xml b/tests/signature/api-check/system-annotation/AndroidTest.xml
index 5d2f13f..2b01af4 100644
--- a/tests/signature/api-check/system-annotation/AndroidTest.xml
+++ b/tests/signature/api-check/system-annotation/AndroidTest.xml
@@ -44,4 +44,8 @@
<option name="instrumentation-arg" key="annotation-for-exact-match" value="android.annotation.SystemApi" />
<option name="runtime-hint" value="30s" />
</test>
+
+ <!-- Controller that will skip the module if a native bridge situation is detected -->
+ <!-- For example: module wants to run arm32 and device is x86 -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.NativeBridgeModuleController" />
</configuration>
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
index ee35eed..0a198f2 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
@@ -108,10 +108,8 @@
* Checks whether the cellular stack should be running on this device.
*/
private boolean hasCellular() {
- ConnectivityManager mgr =
- (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
- return mgr.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) &&
- mTelephonyManager.isVoiceCapable();
+ return mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) &&
+ mTelephonyManager.getPhoneCount() > 0;
}
private boolean isSimCardPresent() {
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index b20bd67..a83e567 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -1472,9 +1472,9 @@
android:protectionLevel="signature|privileged" />
<!-- @hide Allows internal management of Wi-Fi connectivity state when on
- permission review mode.
+ wireless consent mode.
<p>Not for use by third-party applications. -->
- <permission android:name="android.permission.MANAGE_WIFI_WHEN_PERMISSION_REVIEW_REQUIRED"
+ <permission android:name="android.permission.MANAGE_WIFI_WHEN_WIRELESS_CONSENT_REQUIRED"
android:protectionLevel="signature" />
<!-- @hide Allows an app to bypass Private DNS.
@@ -1580,9 +1580,9 @@
<permission android:name="android.permission.NFC_HANDOVER_STATUS"
android:protectionLevel="signature|privileged" />
- <!-- @hide Allows internal management of Bluetooth state when on permission review mode.
+ <!-- @hide Allows internal management of Bluetooth state when on wireless consnet mode.
<p>Not for use by third-party applications. -->
- <permission android:name="android.permission.MANAGE_BLUETOOTH_WHEN_PERMISSION_REVIEW_REQUIRED"
+ <permission android:name="android.permission.MANAGE_BLUETOOTH_WHEN_WIRELESS_CONSENT_REQUIRED"
android:protectionLevel="signature" />
<!-- ================================== -->
diff --git a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerThrottlingTest.java b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerThrottlingTest.java
index 7628c82..79b6bd1 100644
--- a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerThrottlingTest.java
+++ b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerThrottlingTest.java
@@ -18,7 +18,7 @@
import static android.content.pm.cts.shortcutmanager.common.Constants.INLINE_REPLY_REMOTE_INPUT_CAPTION;
-import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.resetThrottling;
+import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.resetAllThrottling;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.runCommandForNoOutput;
import android.content.ComponentName;
@@ -64,7 +64,7 @@
protected void setUp() throws Exception {
super.setUp();
- resetThrottling(getInstrumentation());
+ resetAllThrottling(getInstrumentation());
UiDevice.getInstance(getInstrumentation()).pressHome();
diff --git a/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java b/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
index 4cc5ec6..606bde9 100644
--- a/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
@@ -30,6 +30,7 @@
import android.app.Instrumentation;
import android.app.UiAutomation;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.widget.NumberPicker;
@@ -340,11 +341,15 @@
final int[] numberPickerLocationOnScreen = new int[2];
mNumberPicker.getLocationOnScreen(numberPickerLocationOnScreen);
+ int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
+ int numberPickerMiddleX = numberPickerLocationOnScreen[0] + mNumberPicker.getWidth() / 2;
+ int numberPickerStartY = numberPickerLocationOnScreen[1] + 1;
+
CtsTouchUtils.emulateDragGesture(mInstrumentation,
- numberPickerLocationOnScreen[0] + mNumberPicker.getWidth() / 2,
- numberPickerLocationOnScreen[1] + 1,
+ numberPickerMiddleX,
+ numberPickerStartY,
0,
- mNumberPicker.getHeight() - 2);
+ screenHeight - numberPickerStartY); // drag down to the bottom of the screen.
// At this point we expect that the drag-down gesture has selected the value
// that was "above" the previously selected one, and that our value change listener
@@ -389,12 +394,15 @@
final int[] numberPickerLocationOnScreen = new int[2];
mNumberPicker.getLocationOnScreen(numberPickerLocationOnScreen);
+ int numberPickerMiddleX = numberPickerLocationOnScreen[0] + mNumberPicker.getWidth() / 2;
+ int numberPickerEndY = numberPickerLocationOnScreen[1] + mNumberPicker.getHeight() - 1;
+
mUiAutomation.executeAndWaitForEvent(() ->
CtsTouchUtils.emulateDragGesture(mInstrumentation,
- numberPickerLocationOnScreen[0] + mNumberPicker.getWidth() / 2,
- numberPickerLocationOnScreen[1] + mNumberPicker.getHeight() - 1,
+ numberPickerMiddleX,
+ numberPickerEndY,
0,
- -(mNumberPicker.getHeight() - 2)),
+ -(numberPickerEndY)), // drag up to the top of the screen.
(AccessibilityEvent event) ->
event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED,
TIMEOUT_ACCESSIBILITY_EVENT);
@@ -434,4 +442,5 @@
mNumberPicker.setWrapSelectorWheel(true);
assertTrue(mNumberPicker.getWrapSelectorWheel());
}
+
}