Merge changes from topic 'merge-enso-to-master'
* changes:
API update for OpenJdk based libcore
Switch RecoverySystem impl to use sun.security.pkcs
Use libcore/known_oj_tags for the javadoc stage.
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
index 2eca42b..adc1cd7 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
@@ -448,4 +448,20 @@
static boolean isSupportedKeycode(int androidKeycode) {
return HdmiCecKeycode.androidKeyToCecKey(androidKeycode) != null;
}
+
+ /**
+ * Returns CEC keycode to control audio mute status.
+ *
+ * @param muting {@code true} if audio is being muted
+ */
+ public static int getMuteKey(boolean muting) {
+ // CEC_KEYCODE_MUTE_FUNCTION, CEC_KEYCODE_RESTORE_VOLUME_FUNCTION are deterministic
+ // commands that ensures the status changes to what we want, while CEC_KEYCODE_MUTE
+ // simply toggles the status.
+ // The former is a better choice in this regard, but there are compatibility issues
+ // observed - many audio receivers don't recognize the commands. We fall back on
+ // CEC_KEYCODE_MUTE for now.
+ // return muting ? CEC_KEYCODE_MUTE_FUNCTION : CEC_KEYCODE_RESTORE_VOLUME_FUNCTION;
+ return CEC_KEYCODE_MUTE;
+ }
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index cd8484f..e63a143 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -1099,8 +1099,7 @@
// Remove existing volume action.
removeAction(VolumeControlAction.class);
sendUserControlPressedAndReleased(getAvrDeviceInfo().getLogicalAddress(),
- mute ? HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION :
- HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION);
+ HdmiCecKeycode.getMuteKey(mute));
}
@Override
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
index dba3591..2ae5c97 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
@@ -68,10 +68,8 @@
// the audio amplifier is unknown.
tv().setAudioStatus(false, Constants.UNKNOWN_VOLUME);
- int uiCommand = tv().isSystemAudioActivated()
- ? HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION // SystemAudioMode: ON
- : HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION; // SystemAudioMode: OFF
- sendUserControlPressedAndReleased(mAvrAddress, uiCommand);
+ sendUserControlPressedAndReleased(mAvrAddress,
+ HdmiCecKeycode.getMuteKey(!tv().isSystemAudioActivated()));
// Still return SUCCESS to callback.
finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
diff --git a/services/net/java/android/net/dhcp/DhcpPacket.java b/services/net/java/android/net/dhcp/DhcpPacket.java
index 8927bfa..6a255e5 100644
--- a/services/net/java/android/net/dhcp/DhcpPacket.java
+++ b/services/net/java/android/net/dhcp/DhcpPacket.java
@@ -291,6 +291,11 @@
*/
abstract void finishPacket(ByteBuffer buffer);
+ // Set in unit tests, to ensure that the test does not break when run on different devices and
+ // on different releases.
+ static String testOverrideVendorId = null;
+ static String testOverrideHostname = null;
+
protected DhcpPacket(int transId, short secs, Inet4Address clientIp, Inet4Address yourIp,
Inet4Address nextIp, Inet4Address relayIp,
byte[] clientMac, boolean broadcast) {
@@ -593,6 +598,16 @@
buf.put((byte) 0xFF);
}
+ private String getVendorId() {
+ if (testOverrideVendorId != null) return testOverrideVendorId;
+ return "android-dhcp-" + Build.VERSION.RELEASE;
+ }
+
+ private String getHostname() {
+ if (testOverrideHostname != null) return testOverrideHostname;
+ return SystemProperties.get("net.hostname");
+ }
+
/**
* Adds common client TLVs.
*
@@ -601,8 +616,8 @@
*/
protected void addCommonClientTlvs(ByteBuffer buf) {
addTlv(buf, DHCP_MAX_MESSAGE_SIZE, (short) MAX_LENGTH);
- addTlv(buf, DHCP_VENDOR_CLASS_ID, "android-dhcp-" + Build.VERSION.RELEASE);
- addTlv(buf, DHCP_HOST_NAME, SystemProperties.get("net.hostname"));
+ addTlv(buf, DHCP_VENDOR_CLASS_ID, getVendorId());
+ addTlv(buf, DHCP_HOST_NAME, getHostname());
}
/**
diff --git a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
index 7e60bf1..2a967e6 100644
--- a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
+++ b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
@@ -29,6 +29,7 @@
import junit.framework.TestCase;
import libcore.util.HexEncoding;
+import java.util.Arrays;
import static android.net.dhcp.DhcpPacket.*;
@@ -47,6 +48,11 @@
return (Inet4Address) NetworkUtils.numericToInetAddress(addrString);
}
+ public void setUp() {
+ DhcpPacket.testOverrideVendorId = "android-dhcp-???";
+ DhcpPacket.testOverrideHostname = "android-01234567890abcde";
+ }
+
class TestDhcpPacket extends DhcpPacket {
private byte mType;
// TODO: Make this a map of option numbers to bytes instead.
@@ -584,4 +590,93 @@
assertDhcpResults("192.168.189.49/24", "192.168.189.1", "8.8.8.8,8.8.4.4",
null, "192.171.189.2", null, 28800, false, dhcpResults);
}
+
+ @SmallTest
+ public void testDiscoverPacket() throws Exception {
+ short secs = 7;
+ int transactionId = 0xdeadbeef;
+ byte[] hwaddr = {
+ (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a
+ };
+ byte[] params = new byte[] {
+ DHCP_SUBNET_MASK,
+ DHCP_ROUTER,
+ DHCP_DNS_SERVER,
+ DHCP_DOMAIN_NAME,
+ DHCP_MTU,
+ DHCP_LEASE_TIME,
+ };
+
+ ByteBuffer packet = DhcpPacket.buildDiscoverPacket(
+ DhcpPacket.ENCAP_L2, transactionId, secs, hwaddr,
+ false /* do unicast */, params);
+
+ byte[] headers = new byte[] {
+ // Ethernet header.
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+ (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a,
+ (byte) 0x08, (byte) 0x00,
+ // IP header.
+ (byte) 0x45, (byte) 0x10, (byte) 0x01, (byte) 0x52,
+ (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x00,
+ (byte) 0x40, (byte) 0x11, (byte) 0x39, (byte) 0x8c,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+ // UDP header.
+ (byte) 0x00, (byte) 0x44, (byte) 0x00, (byte) 0x43,
+ (byte) 0x01, (byte) 0x3e, (byte) 0xd8, (byte) 0xa4,
+ // BOOTP.
+ (byte) 0x01, (byte) 0x01, (byte) 0x06, (byte) 0x00,
+ (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef,
+ (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+ (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b,
+ (byte) 0xb1, (byte) 0x7a
+ };
+ byte[] options = new byte[] {
+ // Magic cookie 0x63825363.
+ (byte) 0x63, (byte) 0x82, (byte) 0x53, (byte) 0x63,
+ // Message type DISCOVER.
+ (byte) 0x35, (byte) 0x01, (byte) 0x01,
+ // Client identifier Ethernet, da:01:19:5b:b1:7a.
+ (byte) 0x3d, (byte) 0x07,
+ (byte) 0x01,
+ (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a,
+ // Max message size 1500.
+ (byte) 0x39, (byte) 0x02, (byte) 0x05, (byte) 0xdc,
+ // Version "android-dhcp-???".
+ (byte) 0x3c, (byte) 0x10,
+ 'a', 'n', 'd', 'r', 'o', 'i', 'd', '-', 'd', 'h', 'c', 'p', '-', '?', '?', '?',
+ // Hostname "android-01234567890abcde"
+ (byte) 0x0c, (byte) 0x18,
+ 'a', 'n', 'd', 'r', 'o', 'i', 'd', '-',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e',
+ // Requested parameter list.
+ (byte) 0x37, (byte) 0x06,
+ DHCP_SUBNET_MASK,
+ DHCP_ROUTER,
+ DHCP_DNS_SERVER,
+ DHCP_DOMAIN_NAME,
+ DHCP_MTU,
+ DHCP_LEASE_TIME,
+ // End options.
+ (byte) 0xff,
+ // Our packets are always of even length. TODO: find out why and possibly fix it.
+ (byte) 0x00
+ };
+ byte[] expected = new byte[DhcpPacket.MIN_PACKET_LENGTH_L2 + options.length];
+ assertTrue((expected.length & 1) == 0);
+ System.arraycopy(headers, 0, expected, 0, headers.length);
+ System.arraycopy(options, 0, expected, DhcpPacket.MIN_PACKET_LENGTH_L2, options.length);
+
+ byte[] actual = new byte[packet.limit()];
+ packet.get(actual);
+ String msg =
+ "Expected:\n " + Arrays.toString(expected) +
+ "\nActual:\n " + Arrays.toString(actual);
+ assertTrue(msg, Arrays.equals(expected, actual));
+ }
}