Merge "Mark EdgeEffectTests#testOnAbsorb() as @LargeTest" into oc-dev
diff --git a/tests/autofillservice/src/android/autofillservice/cts/InstrumentedAutoFillService.java b/tests/autofillservice/src/android/autofillservice/cts/InstrumentedAutoFillService.java
index 29e1aea..7083875 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/InstrumentedAutoFillService.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/InstrumentedAutoFillService.java
@@ -28,6 +28,7 @@
import android.app.assist.AssistStructure;
import android.autofillservice.cts.CannedFillResponse.CannedDataset;
+import android.content.ComponentName;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.service.autofill.AutofillService;
@@ -87,8 +88,11 @@
@Override
public void onFillRequest(android.service.autofill.FillRequest request,
CancellationSignal cancellationSignal, FillCallback callback) {
+ if (sIgnoreUnexpectedRequests || !fromSamePackage(request.getFillContexts())) {
+ Log.w(TAG, "Ignoring onFillRequest()");
+ return;
+ }
if (DUMP_FILL_REQUESTS) dumpStructure("onFillRequest()", request.getFillContexts());
-
sReplier.onFillRequest(request.getFillContexts(), request.getClientState(),
cancellationSignal, callback, request.getFlags());
}
@@ -96,10 +100,25 @@
@Override
public void onSaveRequest(android.service.autofill.SaveRequest request,
SaveCallback callback) {
+ if (sIgnoreUnexpectedRequests || !fromSamePackage(request.getFillContexts())) {
+ Log.w(TAG, "Ignoring onSaveRequest()");
+ return;
+ }
if (DUMP_SAVE_REQUESTS) dumpStructure("onSaveRequest()", request.getFillContexts());
sReplier.onSaveRequest(request.getFillContexts(), request.getClientState(), callback);
}
+ private boolean fromSamePackage(List<FillContext> contexts) {
+ final ComponentName component = contexts.get(contexts.size() - 1).getStructure()
+ .getActivityComponent();
+ final String actualPackage = component.getPackageName();
+ if (!actualPackage.equals(getPackageName())) {
+ Log.w(TAG, "Got request from package " + actualPackage);
+ return false;
+ }
+ return true;
+ }
+
/**
* Sets whether unexpected calls to
* {@link #onFillRequest(android.service.autofill.FillRequest, CancellationSignal, FillCallback)}
@@ -294,10 +313,6 @@
private void onFillRequest(List<FillContext> contexts, Bundle data,
CancellationSignal cancellationSignal, FillCallback callback, int flags) {
- if (sIgnoreUnexpectedRequests) {
- Log.w(TAG, "Ignoring fillRequest()");
- return;
- }
try {
CannedFillResponse response = null;
try {
diff --git a/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
index 0080cd8..3c969cd 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
@@ -1056,6 +1056,76 @@
assertNoDanglingSessions();
}
+ enum DismissType {
+ BACK_BUTTON,
+ HOME_BUTTON,
+ TOUCH_OUTSIDE
+ }
+
+ @Test
+ public void testSaveGoesAwayWhenTappingHomeButton() throws Exception {
+ saveGoesAway(DismissType.HOME_BUTTON);
+ }
+
+ /* TODO: add these when fixed.
+ @Test
+ public void testSaveGoesAwayWhenTappingBackButton() throws Exception {
+ saveGoesAway(DismissType.BACK_BUTTON);
+ }
+
+ @Test
+ public void testSaveGoesAwayWhenTouchingOutside() throws Exception {
+ saveGoesAway(DismissType.TOUCH_OUTSIDE);
+ }
+ */
+
+ private void saveGoesAway(DismissType dismissType) throws Exception {
+ enableService();
+
+ // Set expectations.
+ sReplier.addResponse(new CannedFillResponse.Builder()
+ .setRequiredSavableIds(SAVE_DATA_TYPE_PASSWORD, ID_USERNAME, ID_PASSWORD)
+ .build());
+
+ // Trigger auto-fill.
+ mActivity.onUsername(View::requestFocus);
+
+ // Sanity check.
+ sUiBot.assertNoDatasets();
+
+ // Wait for onFill() before proceeding, otherwise the fields might be changed before
+ // the session started
+ sReplier.getNextFillRequest();
+
+ // Set credentials...
+ mActivity.onUsername((v) -> v.setText("malkovich"));
+ mActivity.onPassword((v) -> v.setText("malkovich"));
+
+ // ...and login
+ final String expectedMessage = getWelcomeMessage("malkovich");
+ final String actualMessage = mActivity.tapLogin();
+ assertWithMessage("Wrong welcome msg").that(actualMessage).isEqualTo(expectedMessage);
+
+ // Assert the snack bar is shown and tap "Save".
+ sUiBot.assertSaveShowing(SAVE_DATA_TYPE_PASSWORD);
+
+ // Then make sure it goes away when user doesn't want it..
+ switch (dismissType) {
+ case BACK_BUTTON:
+ sUiBot.pressBack();
+ break;
+ case HOME_BUTTON:
+ sUiBot.pressHome();
+ break;
+ case TOUCH_OUTSIDE:
+ sUiBot.assertShownByText(expectedMessage).click();
+ break;
+ default:
+ throw new IllegalArgumentException("invalid dismiss type: " + dismissType);
+ }
+ sUiBot.assertSaveNotShowing(SAVE_DATA_TYPE_PASSWORD);
+ }
+
@Test
public void testSaveOnlyPreFilled() throws Exception {
saveOnlyTestPreFilled(false);
diff --git a/tests/autofillservice/src/android/autofillservice/cts/UiBot.java b/tests/autofillservice/src/android/autofillservice/cts/UiBot.java
index 19c58b0..97f073a 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/UiBot.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/UiBot.java
@@ -169,9 +169,10 @@
* <p><b>NOTE:</b> when asserting the dataset picker is shown, prefer
* {@link #assertDatasets(String...)}.
*/
- public void assertShownByText(String text) {
+ public UiObject2 assertShownByText(String text) {
final UiObject2 object = waitForObject(By.text(text));
assertWithMessage(text).that(object).isNotNull();
+ return object;
}
/**
@@ -234,10 +235,18 @@
* Presses the back button.
*/
void pressBack() {
+ Log.d(TAG, "pressBack()");
mDevice.pressBack();
}
/**
+ * Presses the home button.
+ */
+ void pressHome() {
+ Log.d(TAG, "pressHome()");
+ mDevice.pressHome();
+ }
+ /**
* Asserts the save snackbar is not showing and returns it.
*/
void assertSaveNotShowing(int type) {
diff --git a/tests/tests/security/res/raw/bug_34031018_32bit.xmf b/tests/tests/security/res/raw/bug_34031018_32bit.xmf
new file mode 100644
index 0000000..8f869ab
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_34031018_32bit.xmf
Binary files differ
diff --git a/tests/tests/security/res/raw/bug_34031018_64bit.xmf b/tests/tests/security/res/raw/bug_34031018_64bit.xmf
new file mode 100644
index 0000000..4ddd28d
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_34031018_64bit.xmf
Binary files differ
diff --git a/tests/tests/security/src/android/security/cts/EffectBundleTest.java b/tests/tests/security/src/android/security/cts/EffectBundleTest.java
index 5073e1d..32c3b5c 100644
--- a/tests/tests/security/src/android/security/cts/EffectBundleTest.java
+++ b/tests/tests/security/src/android/security/cts/EffectBundleTest.java
@@ -150,6 +150,61 @@
eqGetParamFreqRangeCommand(MEDIA_LONG));
}
+ //testing security bug: 37563371 (short media)
+ public void testEqualizer_setParamProperties_short() throws Exception {
+ assertTrue("testEqualizer_setParamProperties_long did not complete successfully",
+ eqSetParamProperties(MEDIA_SHORT));
+ }
+
+ //testing security bug: 37563371 (long media)
+ public void testEqualizer_setParamProperties_long() throws Exception {
+ assertTrue("testEqualizer_setParamProperties_long did not complete successfully",
+ eqSetParamProperties(MEDIA_LONG));
+ }
+
+ private boolean eqSetParamProperties(int media) {
+ MediaPlayer mp = null;
+ Equalizer eq = null;
+ boolean status = false;
+ try {
+ mp = MediaPlayer.create(getInstrumentation().getContext(), getMediaId(media));
+ eq = new Equalizer(0 /*priority*/, mp.getAudioSessionId());
+
+ int intSize = 4; //bytes
+ int shortSize = 2; //bytes
+
+ int cmdCode = 5; // EFFECT_CMD_SET_PARAM
+ byte command[] = concatArrays(/*status*/ intToByteArray(0),
+ /*psize*/ intToByteArray(1 * intSize),
+ /*vsize*/ intToByteArray(2 * shortSize),
+ /*data[0]*/ intToByteArray((int) 9 /*EQ_PARAM_PROPERTIES*/),
+ /*data[4]*/ shortToByteArray((short)-1 /*preset*/),
+ /*data[6]*/ shortToByteArray((short)5 /*FIVEBAND_NUMBANDS*/));
+ byte reply[] = new byte[ 4 /*command.length*/];
+
+ AudioEffect af = eq;
+ Object o = AudioEffect.class.getDeclaredMethod("command", int.class, byte[].class,
+ byte[].class).invoke(af, cmdCode, command, reply);
+
+ int replyValue = byteArrayToInt(reply, 0 /*offset*/);
+ if (replyValue >= 0) {
+ Log.w(TAG, "Reply Value: " + replyValue);
+ }
+ assertTrue("Negative replyValue was expected ", replyValue < 0);
+ status = true;
+ } catch (Exception e) {
+ Log.w(TAG,"Problem setting parameter in equalizer");
+ } finally {
+ if (eq != null) {
+ eq.release();
+ }
+ if (mp != null) {
+ mp.release();
+ }
+ }
+ return status;
+ }
+
private boolean eqGetParamFreqRangeCommand(int media) {
MediaPlayer mp = null;
Equalizer eq = null;
@@ -316,6 +371,12 @@
return converter.array();
}
+ public static int byteArrayToInt(byte[] valueBuf, int offset) {
+ ByteBuffer converter = ByteBuffer.wrap(valueBuf);
+ converter.order(ByteOrder.nativeOrder());
+ return converter.getInt(offset);
+ }
+
private static byte[] shortToByteArray(short value) {
ByteBuffer converter = ByteBuffer.allocate(2);
converter.order(ByteOrder.nativeOrder());
diff --git a/tests/tests/security/src/android/security/cts/StagefrightTest.java b/tests/tests/security/src/android/security/cts/StagefrightTest.java
index 27463a5..de80421 100644
--- a/tests/tests/security/src/android/security/cts/StagefrightTest.java
+++ b/tests/tests/security/src/android/security/cts/StagefrightTest.java
@@ -334,6 +334,11 @@
doStagefrightTest(R.raw.bug_35467107);
}
+ public void testStagefright_bug_34031018() throws Exception {
+ doStagefrightTest(R.raw.bug_34031018_32bit);
+ doStagefrightTest(R.raw.bug_34031018_64bit);
+ }
+
private void doStagefrightTest(final int rid) throws Exception {
doStagefrightTestMediaPlayer(rid);
doStagefrightTestMediaCodec(rid);
@@ -733,7 +738,7 @@
AssetFileDescriptor fd = resources.openRawResourceFd(rid);
try {
retriever.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
- } catch (RuntimeException e) {
+ } catch (Exception e) {
// ignore
} finally {
closeQuietly(fd);