Merge "MediaCodecBlockTest: update for no CryptoInfo on setLinearBlock" into rvc-dev
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/PresentationTest.java b/tests/framework/base/windowmanager/src/android/server/wm/PresentationTest.java
index 77dc2c0..3619bed 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/PresentationTest.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/PresentationTest.java
@@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertTrue;
+
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.platform.test.annotations.Presubmit;
@@ -63,6 +65,28 @@
}
@Test
+ public void testPresentationDismissAfterResizeDisplay() {
+ final VirtualDisplaySession virtualDisplaySession = createManagedVirtualDisplaySession();
+ WindowManagerState.DisplayContent display = virtualDisplaySession
+ .setPresentationDisplay(true)
+ .setPublicDisplay(true)
+ .createDisplay();
+
+ assertThat(display.getFlags() & Display.FLAG_PRESENTATION)
+ .isEqualTo(Display.FLAG_PRESENTATION);
+
+ launchPresentationActivity(display.mId);
+ assertPresentationOnDisplay(display.mId);
+
+ virtualDisplaySession.resizeDisplay();
+
+ assertTrue("Presentation must dismiss on external public display",
+ mWmState.waitForWithAmState(
+ state -> !isPresentationOnDisplay(state, display.mId),
+ "Presentation window dismiss"));
+ }
+
+ @Test
public void testPresentationBlockedOnNonPresentationDisplay() {
WindowManagerState.DisplayContent display =
createManagedVirtualDisplaySession()
@@ -74,6 +98,15 @@
assertNoPresentationDisplayed();
}
+ private boolean isPresentationOnDisplay(WindowManagerState windowManagerState, int displayId) {
+ final List<WindowManagerState.WindowState> states =
+ windowManagerState.getMatchingWindowType(TYPE_PRESENTATION);
+ for (WindowManagerState.WindowState ws : states) {
+ if (ws.getDisplayId() == displayId) return true;
+ }
+ return false;
+ }
+
private void assertNoPresentationDisplayed() {
final List<WindowManagerState.WindowState> presentationWindows =
mWmState.getWindowsByPackageName(
diff --git a/tests/tests/media/res/raw/binary_counter_320x240_30fps_600frames_empty_normal_editlist_entries.mp4 b/tests/tests/media/res/raw/binary_counter_320x240_30fps_600frames_empty_normal_editlist_entries.mp4
new file mode 100644
index 0000000..5b175ee
--- /dev/null
+++ b/tests/tests/media/res/raw/binary_counter_320x240_30fps_600frames_empty_normal_editlist_entries.mp4
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/EnumDevicesTest.java b/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
index 5872bef..13a9cf8 100644
--- a/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
+++ b/tests/tests/media/src/android/media/cts/EnumDevicesTest.java
@@ -158,6 +158,14 @@
assertNotNull(encodings);
// Note: an empty array indicates that the device supports arbitrary encodings.
+ // Encapsulation Modes
+ int[] encapsulationModes = deviceInfo.getEncapsulationModes();
+ assertNotNull(encapsulationModes);
+
+ // EncapsulationMetadataTypes
+ int[] encapsulationMetadataTypes = deviceInfo.getEncapsulationMetadataTypes();
+ assertNotNull(encapsulationMetadataTypes);
+
int type = deviceInfo.getType();
assertTrue(type != AudioDeviceInfo.TYPE_UNKNOWN);
}
diff --git a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
index e5bf714..0a431d8 100644
--- a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
@@ -641,6 +641,30 @@
testGetFrameAtTimeEditList(OPTION_CLOSEST, testCases);
}
+ public void testGetFrameAtTimePreviousSyncEmptyNormalEditList() {
+ int[][] testCases = {
+ { 2133000, 60 }, { 2566334, 60 }, { 2666334, 60 }, { 3100000, 60 }, { 3266000, 90}};
+ testGetFrameAtTimeEmptyNormalEditList(OPTION_PREVIOUS_SYNC, testCases);
+ }
+
+ public void testGetFrameAtTimeNextSyncEmptyNormalEditList() {
+ int[][] testCases = {{ 2000000, 60 }, { 2133000, 60 }, { 2566334, 90 }, { 3100000, 90 },
+ { 3200000, 120}};
+ testGetFrameAtTimeEmptyNormalEditList(OPTION_NEXT_SYNC, testCases);
+ }
+
+ public void testGetFrameAtTimeClosestSyncEmptyNormalEditList() {
+ int[][] testCases = {
+ { 2133000, 60 }, { 2566334, 60 }, { 2666000, 90 }, { 3133000, 90 }, { 3200000, 90}};
+ testGetFrameAtTimeEmptyNormalEditList(OPTION_CLOSEST_SYNC, testCases);
+ }
+
+ public void testGetFrameAtTimeClosestEmptyNormalEditList() {
+ int[][] testCases = {
+ { 2133000, 60 }, { 2566000, 73 }, { 2666000, 76 }, { 3066001, 88 }, { 3255000, 94}};
+ testGetFrameAtTimeEmptyNormalEditList(OPTION_CLOSEST, testCases);
+ }
+
private void testGetFrameAtTime(int option, int[][] testCases) {
testGetFrameAt(testCases, (r) -> {
List<Bitmap> bitmaps = new ArrayList<>();
@@ -666,6 +690,21 @@
});
}
+ private void testGetFrameAtTimeEmptyNormalEditList(int option, int[][] testCases) {
+ MediaMetadataRetriever.BitmapParams params = new MediaMetadataRetriever.BitmapParams();
+ params.setPreferredConfig(Bitmap.Config.ARGB_8888);
+
+ testGetFrameAtEmptyNormalEditList(testCases, (r) -> {
+ List<Bitmap> bitmaps = new ArrayList<>();
+ for (int i = 0; i < testCases.length; i++) {
+ Bitmap bitmap = r.getFrameAtTime(testCases[i][0], option, params);
+ assertEquals(Bitmap.Config.ARGB_8888, params.getActualConfig());
+ bitmaps.add(bitmap);
+ }
+ return bitmaps;
+ });
+ }
+
public void testGetFrameAtIndex() {
int[][] testCases = { { 60, 60 }, { 73, 73 }, { 76, 76 }, { 88, 88 }, { 94, 94} };
@@ -724,6 +763,11 @@
testCases, bitmapRetriever);
}
+ private void testGetFrameAtEmptyNormalEditList(int[][] testCases,
+ Function<MediaMetadataRetriever, List<Bitmap> > bitmapRetriever) {
+ testGetFrameAt(R.raw.binary_counter_320x240_30fps_600frames_empty_normal_editlist_entries,
+ testCases, bitmapRetriever);
+ }
private void testGetFrameAt(int resId, int[][] testCases,
Function<MediaMetadataRetriever, List<Bitmap> > bitmapRetriever) {
if (!MediaUtils.hasCodecForResourceAndDomain(getContext(), resId, "video/")
diff --git a/tests/tests/mediaparser/src/android/media/mediaparser/cts/MediaParserTest.java b/tests/tests/mediaparser/src/android/media/mediaparser/cts/MediaParserTest.java
index 5013f1c..7915d37 100644
--- a/tests/tests/mediaparser/src/android/media/mediaparser/cts/MediaParserTest.java
+++ b/tests/tests/mediaparser/src/android/media/mediaparser/cts/MediaParserTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.media.MediaFormat;
import android.media.MediaParser;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -38,6 +39,60 @@
public class MediaParserTest {
@Test
+ public void testGetAllParserNames() {
+ MediaFormat format = new MediaFormat();
+ // By not providing a mime type, MediaParser should return all parser names.
+ format.setString(MediaFormat.KEY_MIME, null);
+ assertThat(MediaParser.getParserNames(format))
+ .containsExactly(
+ MediaParser.PARSER_NAME_MATROSKA,
+ MediaParser.PARSER_NAME_FMP4,
+ MediaParser.PARSER_NAME_MP4,
+ MediaParser.PARSER_NAME_MP3,
+ MediaParser.PARSER_NAME_ADTS,
+ MediaParser.PARSER_NAME_AC3,
+ MediaParser.PARSER_NAME_TS,
+ MediaParser.PARSER_NAME_FLV,
+ MediaParser.PARSER_NAME_OGG,
+ MediaParser.PARSER_NAME_PS,
+ MediaParser.PARSER_NAME_WAV,
+ MediaParser.PARSER_NAME_AMR,
+ MediaParser.PARSER_NAME_AC4,
+ MediaParser.PARSER_NAME_FLAC);
+ }
+
+ @Test
+ public void testGetParserNamesByMimeType() {
+ // MimeTypes obtained from the W3C.
+ assertParsers(MediaParser.PARSER_NAME_MATROSKA)
+ .supportMimeTypes(
+ "video/x-matroska", "audio/x-matroska", "video/x-webm", "audio/x-webm");
+ assertParsers(MediaParser.PARSER_NAME_MP4, MediaParser.PARSER_NAME_FMP4)
+ .supportMimeTypes("video/mp4", "audio/mp4", "application/mp4");
+ assertParsers(MediaParser.PARSER_NAME_MP3).supportMimeTypes("audio/mpeg");
+ assertParsers(MediaParser.PARSER_NAME_ADTS).supportMimeTypes("audio/aac");
+ assertParsers(MediaParser.PARSER_NAME_AC3).supportMimeTypes("audio/ac3");
+ assertParsers(MediaParser.PARSER_NAME_TS).supportMimeTypes("video/mp2t", "audio/mp2t");
+ assertParsers(MediaParser.PARSER_NAME_FLV).supportMimeTypes("video/x-flv");
+ assertParsers(MediaParser.PARSER_NAME_OGG)
+ .supportMimeTypes("video/ogg", "audio/ogg", "application/ogg");
+ assertParsers(MediaParser.PARSER_NAME_PS).supportMimeTypes("video/mp2p", "video/mp1s");
+ assertParsers(MediaParser.PARSER_NAME_WAV)
+ .supportMimeTypes("audio/vnd.wave", "audio/wav", "audio/wave", "audio/x-wav");
+ assertParsers(MediaParser.PARSER_NAME_AMR).supportMimeTypes("audio/amr");
+ assertParsers(MediaParser.PARSER_NAME_AC4).supportMimeTypes("audio/ac4");
+ assertParsers(MediaParser.PARSER_NAME_FLAC).supportMimeTypes("audio/flac", "audio/x-flac");
+ }
+
+ @Test
+ public void testGetParserNamesForUnsupportedMimeType() {
+ MediaFormat format = new MediaFormat();
+ // None of the parser supports WebVTT.
+ format.setString(MediaFormat.KEY_MIME, "text/vtt");
+ assertThat(MediaParser.getParserNames(format)).isEmpty();
+ }
+
+ @Test
public void testCreationByName() {
testCreationByName(MediaParser.PARSER_NAME_MATROSKA);
testCreationByName(MediaParser.PARSER_NAME_FMP4);
@@ -430,4 +485,26 @@
}
}
}
+
+ private static FluentMediaParserSubject assertParsers(String... names) {
+ return new FluentMediaParserSubject(names);
+ }
+
+ private static final class FluentMediaParserSubject {
+
+ private final String[] mediaParserNames;
+
+ private FluentMediaParserSubject(String[] mediaParserNames) {
+ this.mediaParserNames = mediaParserNames;
+ }
+
+ public void supportMimeTypes(String... mimeTypes) {
+ for (String mimeType : mimeTypes) {
+ MediaFormat format = new MediaFormat();
+ format.setString(MediaFormat.KEY_MIME, mimeType);
+ assertThat(MediaParser.getParserNames(format))
+ .containsExactlyElementsIn(mediaParserNames);
+ }
+ }
+ }
}
diff --git a/tests/tests/permission3/src/android/permission3/cts/PermissionTest23.kt b/tests/tests/permission3/src/android/permission3/cts/PermissionTest23.kt
index 8a61da7..54dfee7 100644
--- a/tests/tests/permission3/src/android/permission3/cts/PermissionTest23.kt
+++ b/tests/tests/permission3/src/android/permission3/cts/PermissionTest23.kt
@@ -16,7 +16,6 @@
package android.permission3.cts
-import androidx.test.filters.FlakyTest
import org.junit.Before
import org.junit.Test
@@ -229,7 +228,6 @@
assertAppHasPermission(android.Manifest.permission.READ_CONTACTS, false)
}
- @FlakyTest
@Test
fun testNoResidualPermissionsOnUninstall() {
// Grant all permissions
diff --git a/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java b/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
index eadd4d7..507cbbe 100644
--- a/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
+++ b/tests/tests/widget/src/android/widget/cts/PopupWindowTest.java
@@ -1979,6 +1979,43 @@
assertEquals(subPopupLocation[1] - deltaY, newSubPopupLocation[1]);
}
+ @Test
+ public void testFocusAfterOrientation() throws Throwable {
+ int[] orientationValues = {ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE,
+ ActivityInfo.SCREEN_ORIENTATION_PORTRAIT};
+ int currentOrientation = mActivity.getResources().getConfiguration().orientation;
+ if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
+ orientationValues[0] = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+ orientationValues[1] = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+ }
+
+ View content = createPopupContent(CONTENT_SIZE_DP, CONTENT_SIZE_DP);
+ content.setFocusable(true);
+ mPopupWindow = createPopupWindow(content);
+ mPopupWindow.setFocusable(true);
+ mPopupWindow.setWidth(WindowManager.LayoutParams.MATCH_PARENT);
+ mPopupWindow.setHeight(WindowManager.LayoutParams.MATCH_PARENT);
+ showPopup(R.id.anchor_upper_left);
+ mInstrumentation.waitForIdleSync();
+ assertTrue(content.isFocused());
+
+ if (!hasDeviceFeature(PackageManager.FEATURE_SCREEN_PORTRAIT)) {
+ return;
+ }
+
+
+ for (int i = 0; i < 2; i++) {
+ final int orientation = orientationValues[i];
+ mActivity.runOnUiThread(() ->
+ mActivity.setRequestedOrientation(orientation));
+ mActivity.waitForConfigurationChanged();
+ // Wait for main thread to be idle to make sure layout and draw have been performed
+ // before continuing.
+ mInstrumentation.waitForIdleSync();
+ assertTrue(content.isFocused());
+ }
+ }
+
private void verifySubPopupPosition(PopupWindow subPopup, int mainAnchorId, int subAnchorId,
int contentEdgeX, int operatorX, int anchorEdgeX,
int contentEdgeY, int operatorY, int anchorEdgeY) throws Throwable {