Merge "Camera2: Fix auto-gen documentation crossreferences." into mnc-dev
diff --git a/core/java/com/android/internal/midi/MidiFramer.java b/core/java/com/android/internal/midi/MidiFramer.java
index 53d71bb..1a7fa0b 100644
--- a/core/java/com/android/internal/midi/MidiFramer.java
+++ b/core/java/com/android/internal/midi/MidiFramer.java
@@ -17,6 +17,7 @@
package com.android.internal.midi;
import android.media.midi.MidiReceiver;
+import android.util.Log;
import java.io.IOException;
@@ -38,6 +39,7 @@
private int mCount;
private int mRunningStatus;
private int mNeeded;
+ private boolean mInSysEx;
public MidiFramer(MidiReceiver receiver) {
mReceiver = receiver;
@@ -52,12 +54,14 @@
}
/*
- * @see android.midi.MidiReceiver#onPost(byte[], int, int, long)
+ * @see android.midi.MidiReceiver#onReceive(byte[], int, int, long)
*/
@Override
public void onReceive(byte[] data, int offset, int count, long timestamp)
throws IOException {
// Log.i(TAG, formatMidiData(data, offset, count));
+ int sysExStartOffset = (mInSysEx ? offset : -1);
+
for (int i = 0; i < count; i++) {
int b = data[offset] & 0xFF;
if (b >= 0x80) { // status byte?
@@ -66,27 +70,50 @@
mCount = 1;
mNeeded = MidiConstants.getBytesPerMessage(b) - 1;
} else if (b < 0xF8) { // system common?
- mBuffer[0] = (byte) b;
- mRunningStatus = 0;
- mCount = 1;
- mNeeded = MidiConstants.getBytesPerMessage(b) - 1;
+ if (b == 0xF0 /* SysEx Start */) {
+ // Log.i(TAG, "SysEx Start");
+ mInSysEx = true;
+ sysExStartOffset = offset;
+ } else if (b == 0xF7 /* SysEx End */) {
+ // Log.i(TAG, "SysEx End");
+ if (mInSysEx) {
+ mReceiver.sendWithTimestamp(data, sysExStartOffset,
+ offset - sysExStartOffset, timestamp);
+ mInSysEx = false;
+ sysExStartOffset = -1;
+ }
+ } else {
+ mBuffer[0] = (byte) b;
+ mRunningStatus = 0;
+ mCount = 1;
+ mNeeded = MidiConstants.getBytesPerMessage(b) - 1;
+ }
} else { // real-time?
// Single byte message interleaved with other data.
mReceiver.sendWithTimestamp(data, offset, 1, timestamp);
}
} else { // data byte
- mBuffer[mCount++] = (byte) b;
- if (--mNeeded == 0) {
- if (mRunningStatus != 0) {
- mBuffer[0] = (byte) mRunningStatus;
+ // Save SysEx data for SysEx End marker or end of buffer.
+ if (!mInSysEx) {
+ mBuffer[mCount++] = (byte) b;
+ if (--mNeeded == 0) {
+ if (mRunningStatus != 0) {
+ mBuffer[0] = (byte) mRunningStatus;
+ }
+ mReceiver.sendWithTimestamp(mBuffer, 0, mCount, timestamp);
+ mNeeded = MidiConstants.getBytesPerMessage(mBuffer[0]) - 1;
+ mCount = 1;
}
- mReceiver.sendWithTimestamp(mBuffer, 0, mCount, timestamp);
- mNeeded = MidiConstants.getBytesPerMessage(mBuffer[0]) - 1;
- mCount = 1;
}
}
++offset;
}
+
+ // send any accumulatedSysEx data
+ if (sysExStartOffset >= 0) {
+ mReceiver.sendWithTimestamp(data, sysExStartOffset,
+ offset - sysExStartOffset, timestamp);
+ }
}
}
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 3bbbc71..c3d8cfa 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -1464,7 +1464,8 @@
bounds.right - insetR - padR, bounds.bottom - r.mInsetB - padB);
// Apply resolved gravity to drawable based on resolved size.
- final int gravity = resolveGravity(r.mGravity, r.mWidth, r.mHeight);
+ final int gravity = resolveGravity(r.mGravity, r.mWidth, r.mHeight,
+ d.getIntrinsicWidth(), d.getIntrinsicHeight());
final int w = r.mWidth < 0 ? d.getIntrinsicWidth() : r.mWidth;
final int h = r.mHeight < 0 ? d.getIntrinsicHeight() : r.mHeight;
Gravity.apply(gravity, w, h, container, outRect, layoutDirection);
@@ -1491,7 +1492,8 @@
* @param height height of the layer if set, -1 otherwise
* @return the default gravity for the layer
*/
- private static int resolveGravity(int gravity, int width, int height) {
+ private static int resolveGravity(int gravity, int width, int height,
+ int intrinsicWidth, int intrinsicHeight) {
if (!Gravity.isHorizontal(gravity)) {
if (width < 0) {
gravity |= Gravity.FILL_HORIZONTAL;
@@ -1508,6 +1510,17 @@
}
}
+ // If a dimension if not specified, either implicitly or explicitly,
+ // force FILL for that dimension's gravity. This ensures that colors
+ // are handled correctly and ensures backward compatibility.
+ if (width < 0 && intrinsicWidth < 0) {
+ gravity |= Gravity.FILL_HORIZONTAL;
+ }
+
+ if (height < 0 && intrinsicHeight < 0) {
+ gravity |= Gravity.FILL_VERTICAL;
+ }
+
return gravity;
}