Merge "release-request-25678148-c7cb-47b4-8abd-6c8063d3f5e2-for-aosp-nougat-cts-release-4369580 snap-temp-L55000000107926022" into nougat-cts-release
diff --git a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
index bb7f521..095d39f 100644
--- a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
+++ b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityAndWindowManagersState.java
@@ -40,6 +40,7 @@
// Clone of android DisplayMetrics.DENSITY_DEFAULT (DENSITY_MEDIUM)
// (Needed in host-side tests to convert dp to px.)
private static final int DISPLAY_DENSITY_DEFAULT = 160;
+ public static final int DEFAULT_DISPLAY_ID = 0;
// Default minimal size of resizable task, used if none is set explicitly.
// Must be kept in sync with 'default_minimal_size_resizable_task' dimen from frameworks/base.
diff --git a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
old mode 100644
new mode 100755
index ea18b99..95d46e6
--- a/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
+++ b/hostsidetests/services/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
@@ -17,9 +17,13 @@
import com.android.ddmlib.Log.LogLevel;
import com.android.tradefed.log.LogUtil.CLog;
+import java.awt.Rectangle;
+import static android.server.cts.ActivityAndWindowManagersState.DEFAULT_DISPLAY_ID;
public class ActivityManagerAppConfigurationTests extends ActivityManagerTestBase {
private static final String TEST_ACTIVITY_NAME = "ResizeableActivity";
+ private static final int DISPLAY_DENSITY_DEFAULT = 160;
+ private static final int NAVI_BAR_HEIGHT_DP = 48;
/**
* Tests that the WindowManager#getDefaultDisplay() and the Configuration of the Activity
@@ -106,10 +110,43 @@
}
/**
+ * If aspect ratio larger than 2.0, and system insets less than default system insets height
+ * (from nav bar),it won't meet CTS testcase requirement, so we treat these scenario specially
+ * and do not check the rotation.
+ */
+ private boolean shouldSkipRotationCheck() throws Exception{
+ WindowManagerState wmState = mAmWmState.getWmState();
+ wmState.computeState(mDevice, true);
+ WindowManagerState.Display display = wmState.getDisplay(DEFAULT_DISPLAY_ID);
+ Rectangle displayRect = display.getDisplayRect();
+ Rectangle appRect = display.getAppRect();
+
+ float aspectRatio = 0.0f;
+ int naviBarHeight;
+ if (displayRect.height > displayRect.width) {
+ aspectRatio = (float) displayRect.height / displayRect.width;
+ naviBarHeight = displayRect.height - appRect.height;
+ } else {
+ aspectRatio = (float) displayRect.width / displayRect.height;
+ naviBarHeight = displayRect.width - appRect.width;
+ }
+
+ int density = display.getDpi();
+ int systemInsetsHeight = dpToPx(NAVI_BAR_HEIGHT_DP, density);
+ // After changed rotation the dispalySize will be effected by aspect ratio and system UI
+ // insets (from nav bar) together, so we should check if needed to skip testcase
+ return aspectRatio >= 2.0 && naviBarHeight < systemInsetsHeight;
+ }
+
+ static int dpToPx(float dp, int densityDpi){
+ return (int) (dp * densityDpi / DISPLAY_DENSITY_DEFAULT + 0.5f);
+ }
+
+ /**
* Asserts that after rotation, the aspect ratios of display size, metrics, and configuration
* have flipped.
*/
- private static void assertSizesRotate(ReportedSizes rotationA, ReportedSizes rotationB)
+ private void assertSizesRotate(ReportedSizes rotationA, ReportedSizes rotationB)
throws Exception {
assertEquals(rotationA.displayWidth, rotationA.metricsWidth);
assertEquals(rotationA.displayHeight, rotationA.metricsHeight);
@@ -118,7 +155,9 @@
final boolean beforePortrait = rotationA.displayWidth < rotationA.displayHeight;
final boolean afterPortrait = rotationB.displayWidth < rotationB.displayHeight;
- assertFalse(beforePortrait == afterPortrait);
+ if (!shouldSkipRotationCheck()) {
+ assertFalse(beforePortrait == afterPortrait);
+ }
final boolean beforeConfigPortrait = rotationA.widthDp < rotationA.heightDp;
final boolean afterConfigPortrait = rotationB.widthDp < rotationB.heightDp;
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index 2bee7a6..4f0176f 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -2138,6 +2138,15 @@
<permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"
android:protectionLevel="signature" />
+ <!-- @SystemApi Allows an application to use
+ {@link android.view.WindowManager.LayoutsParams#PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS}
+ to hide non-system-overlay windows.
+ <p>Not for use by third-party applications.
+ @hide
+ -->
+ <permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"
+ android:protectionLevel="signature|installer" />
+
<!-- @SystemApi Allows an application to manage (create, destroy,
Z-order) application tokens in the window manager.
<p>Not for use by third-party applications.
diff --git a/tests/tests/permission2/src/android/permission2/cts/PermissionPolicyTest.java b/tests/tests/permission2/src/android/permission2/cts/PermissionPolicyTest.java
index 61dd66b..1c9c6f1 100644
--- a/tests/tests/permission2/src/android/permission2/cts/PermissionPolicyTest.java
+++ b/tests/tests/permission2/src/android/permission2/cts/PermissionPolicyTest.java
@@ -29,15 +29,24 @@
import java.io.InputStream;
import java.lang.String;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import static android.os.Build.VERSION.SECURITY_PATCH;
+
/**
* Tests for permission policy on the platform.
*/
public class PermissionPolicyTest extends AndroidTestCase {
+ private static final Date HIDE_NON_SYSTEM_OVERLAY_WINDOWS_PATCH_DATE = parseDate("2017-09-05");
+ private static final String HIDE_NON_SYSTEM_OVERLAY_WINDOWS_PERMISSION
+ = "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS";
+
private static final String LOG_TAG = "PermissionProtectionTest";
private static final String PLATFORM_PACKAGE_NAME = "android";
@@ -68,8 +77,12 @@
Set<String> expectedPermissionGroups = new ArraySet<String>();
for (PermissionInfo expectedPermission : loadExpectedPermissions()) {
- // OEMs cannot remove permissions
String expectedPermissionName = expectedPermission.name;
+ if (shouldSkipPermission(expectedPermissionName)) {
+ continue;
+ }
+
+ // OEMs cannot remove permissions
PermissionInfo declaredPermission = declaredPermissionsMap.get(expectedPermissionName);
assertNotNull("Permission " + expectedPermissionName
+ " must be declared", declaredPermission);
@@ -208,4 +221,21 @@
}
return protectionLevel;
}
+
+ private static Date parseDate(String date) {
+ Date patchDate = new Date();
+ try {
+ SimpleDateFormat template = new SimpleDateFormat("yyyy-MM-dd");
+ patchDate = template.parse(date);
+ } catch (ParseException e) {
+ }
+
+ return patchDate;
+ }
+
+ private boolean shouldSkipPermission(String permissionName) {
+ return parseDate(SECURITY_PATCH).before(HIDE_NON_SYSTEM_OVERLAY_WINDOWS_PATCH_DATE) &&
+ HIDE_NON_SYSTEM_OVERLAY_WINDOWS_PERMISSION.equals(permissionName);
+
+ }
}