Merge "Change to write (create) setting+subid if it does not already exist when it is queried for the first time." into lmp-mr1-dev
diff --git a/api/current.txt b/api/current.txt
index 725c27d..1f86b03 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -25657,10 +25657,6 @@
public static final class Telephony.Mms.Intents {
field public static final java.lang.String CONTENT_CHANGED_ACTION = "android.intent.action.CONTENT_CHANGED";
field public static final java.lang.String DELETED_CONTENTS = "deleted_contents";
- field public static final java.lang.String EXTRA_MMS_CONTENT_URI = "android.provider.Telephony.extra.MMS_CONTENT_URI";
- field public static final java.lang.String EXTRA_MMS_LOCATION_URL = "android.provider.Telephony.extra.MMS_LOCATION_URL";
- field public static final java.lang.String MMS_DOWNLOAD_ACTION = "android.provider.Telephony.MMS_DOWNLOAD";
- field public static final java.lang.String MMS_SEND_ACTION = "android.provider.Telephony.MMS_SEND";
}
public static final class Telephony.Mms.Outbox implements android.provider.Telephony.BaseMmsColumns {
@@ -25765,10 +25761,8 @@
field public static final java.lang.String SMS_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_CB_RECEIVED";
field public static final java.lang.String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER";
field public static final java.lang.String SMS_EMERGENCY_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVED";
- field public static final java.lang.String SMS_FILTER_ACTION = "android.provider.Telephony.SMS_FILTER";
field public static final java.lang.String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
field public static final java.lang.String SMS_REJECTED_ACTION = "android.provider.Telephony.SMS_REJECTED";
- field public static final java.lang.String SMS_SEND_ACTION = "android.provider.Telephony.SMS_SEND";
field public static final java.lang.String SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION = "android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED";
field public static final java.lang.String WAP_PUSH_DELIVER_ACTION = "android.provider.Telephony.WAP_PUSH_DELIVER";
field public static final java.lang.String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";
@@ -28511,9 +28505,6 @@
method public void sendMultimediaMessage(android.content.Context, android.net.Uri, java.lang.String, android.os.Bundle, android.app.PendingIntent);
method public void sendMultipartTextMessage(java.lang.String, java.lang.String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
method public void sendTextMessage(java.lang.String, java.lang.String, java.lang.String, android.app.PendingIntent, android.app.PendingIntent);
- method public void updateMmsDownloadStatus(android.content.Context, int, int, android.net.Uri);
- method public void updateMmsSendStatus(android.content.Context, int, byte[], int, android.net.Uri);
- method public void updateSmsSendStatus(int, boolean);
field public static final java.lang.String EXTRA_MMS_DATA = "android.telephony.extra.MMS_DATA";
field public static final java.lang.String EXTRA_MMS_HTTP_STATUS = "android.telephony.extra.MMS_HTTP_STATUS";
field public static final java.lang.String MMS_CONFIG_ALIAS_ENABLED = "aliasEnabled";
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 555f64c..838686a 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5924,6 +5924,18 @@
public static final String WIFI_REENABLE_DELAY_MS = "wifi_reenable_delay";
/**
+ * Timeout for ephemeral networks when all known BSSIDs go out of range. We will disconnect
+ * from an ephemeral network if there is no BSSID for that network with a non-null score that
+ * has been seen in this time period.
+ *
+ * If this is less than or equal to zero, we use a more conservative behavior and only check
+ * for a non-null score from the currently connected or target BSSID.
+ * @hide
+ */
+ public static final String WIFI_EPHEMERAL_OUT_OF_RANGE_TIMEOUT_MS =
+ "wifi_ephemeral_out_of_range_timeout_ms";
+
+ /**
* The number of milliseconds to delay when checking for data stalls during
* non-aggressive detection. (screen is turned off.)
* @hide
diff --git a/core/java/android/text/util/Linkify.java b/core/java/android/text/util/Linkify.java
index 14be269..c1341e1 100644
--- a/core/java/android/text/util/Linkify.java
+++ b/core/java/android/text/util/Linkify.java
@@ -402,7 +402,7 @@
}
boolean hasPrefix = false;
-
+
for (int i = 0; i < prefixes.length; i++) {
if (url.regionMatches(true, 0, prefixes[i], 0,
prefixes[i].length())) {
@@ -450,7 +450,7 @@
private static final void gatherTelLinks(ArrayList<LinkSpec> links, Spannable s) {
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Iterable<PhoneNumberMatch> matches = phoneUtil.findNumbers(s.toString(),
- Locale.getDefault().getCountry(), Leniency.VALID, Long.MAX_VALUE);
+ Locale.getDefault().getCountry(), Leniency.POSSIBLE, Long.MAX_VALUE);
for (PhoneNumberMatch match : matches) {
LinkSpec spec = new LinkSpec();
spec.url = "tel:" + PhoneNumberUtils.normalizeNumber(match.rawString());
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 3324c2d..5350fe2 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -90,7 +90,7 @@
display:block;
padding:0;
white-space: nowrap;
- text-indent: 10000px;
+ text-indent: -10000px;
font-size:0px;
background: url(../images/tools/studio-logo.png);
background-image: -webkit-image-set(url(../images/tools/studio-logo.png) 1x, url(../images/tools/studio-logo_2x.png) 2x);
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index fab4a1a..a998594 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -525,7 +525,7 @@
deferInfo.mergeable &= !recordingComplexClip();
deferInfo.opaqueOverBounds &= !recordingComplexClip() && mSaveStack.isEmpty();
- if (mBatches.size() &&
+ if (CC_LIKELY(mAvoidOverdraw) && mBatches.size() &&
state->mClipSideFlags != kClipSide_ConservativeFull &&
deferInfo.opaqueOverBounds && state->mBounds.contains(mBounds)) {
// avoid overdraw by resetting drawing state + discarding drawing ops
@@ -677,12 +677,13 @@
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
- for (unsigned int i = 1; i < mBatches.size(); i++) {
- if (mBatches[i] && mBatches[i]->coversBounds(mBounds)) {
- discardDrawingBatches(i - 1);
+ if (CC_LIKELY(mAvoidOverdraw)) {
+ for (unsigned int i = 1; i < mBatches.size(); i++) {
+ if (mBatches[i] && mBatches[i]->coversBounds(mBounds)) {
+ discardDrawingBatches(i - 1);
+ }
}
}
-
// NOTE: depth of the save stack at this point, before playback, should be reflected in
// FLUSH_SAVE_STACK_DEPTH, so that save/restores match up correctly
status |= replayBatchList(mBatches, renderer, dirty);
diff --git a/libs/hwui/DeferredDisplayList.h b/libs/hwui/DeferredDisplayList.h
index 885b411..8a015b21 100644
--- a/libs/hwui/DeferredDisplayList.h
+++ b/libs/hwui/DeferredDisplayList.h
@@ -81,8 +81,8 @@
class DeferredDisplayList {
friend class DeferStateStruct; // used to give access to allocator
public:
- DeferredDisplayList(const Rect& bounds) :
- mBounds(bounds) {
+ DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) :
+ mBounds(bounds), mAvoidOverdraw(avoidOverdraw) {
clear();
}
~DeferredDisplayList() { clear(); }
@@ -150,6 +150,7 @@
// layer space bounds of rendering
Rect mBounds;
+ const bool mAvoidOverdraw;
/**
* At defer time, stores the *defer time* savecount of save/saveLayer ops that were deferred, so
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 7285496..6f1e8a2 100755
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1912,7 +1912,10 @@
return status | replayStruct.mDrawGlStatus;
}
- DeferredDisplayList deferredList(*currentClipRect());
+ // Don't avoid overdraw when visualizing, since that makes it harder to
+ // debug where it's coming from, and when the problem occurs.
+ bool avoidOverdraw = !mCaches.debugOverdraw;
+ DeferredDisplayList deferredList(*currentClipRect(), avoidOverdraw);
DeferStateStruct deferStruct(deferredList, *this, replayFlags);
renderNode->defer(deferStruct, 0);
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index f0150d4..8a543ce 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1841,12 +1841,22 @@
}
public void setRingerModeExternal(int ringerMode, String caller) {
- setRingerMode(ringerMode, caller, true /*external*/);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ setRingerMode(ringerMode, caller, true /*external*/);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
public void setRingerModeInternal(int ringerMode, String caller) {
enforceSelfOrSystemUI("setRingerModeInternal");
- setRingerMode(ringerMode, caller, false /*external*/);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ setRingerMode(ringerMode, caller, false /*external*/);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
private void setRingerMode(int ringerMode, String caller, boolean external) {
@@ -1860,26 +1870,28 @@
if ((ringerMode == AudioManager.RINGER_MODE_VIBRATE) && !mHasVibrator) {
ringerMode = AudioManager.RINGER_MODE_SILENT;
}
- final int ringerModeInternal = getRingerModeInternal();
- final int ringerModeExternal = getRingerModeExternal();
- if (external) {
- setRingerModeExt(ringerMode);
- if (mRingerModeDelegate != null) {
- ringerMode = mRingerModeDelegate.onSetRingerModeExternal(ringerModeExternal,
- ringerMode, caller, ringerModeInternal);
+ synchronized (mSettingsLock) {
+ final int ringerModeInternal = getRingerModeInternal();
+ final int ringerModeExternal = getRingerModeExternal();
+ if (external) {
+ setRingerModeExt(ringerMode);
+ if (mRingerModeDelegate != null) {
+ ringerMode = mRingerModeDelegate.onSetRingerModeExternal(ringerModeExternal,
+ ringerMode, caller, ringerModeInternal);
+ }
+ if (ringerMode != ringerModeInternal) {
+ setRingerModeInt(ringerMode, true /*persist*/);
+ }
+ } else /*internal*/ {
+ if (ringerMode != ringerModeInternal) {
+ setRingerModeInt(ringerMode, true /*persist*/);
+ }
+ if (mRingerModeDelegate != null) {
+ ringerMode = mRingerModeDelegate.onSetRingerModeInternal(ringerModeInternal,
+ ringerMode, caller, ringerModeExternal);
+ }
+ setRingerModeExt(ringerMode);
}
- if (ringerMode != ringerModeInternal) {
- setRingerModeInt(ringerMode, true /*persist*/);
- }
- } else /*internal*/ {
- if (ringerMode != ringerModeInternal) {
- setRingerModeInt(ringerMode, true /*persist*/);
- }
- if (mRingerModeDelegate != null) {
- ringerMode = mRingerModeDelegate.onSetRingerModeInternal(ringerModeInternal,
- ringerMode, caller, ringerModeExternal);
- }
- setRingerModeExt(ringerMode);
}
}
@@ -1968,10 +1980,10 @@
switch (getVibrateSetting(vibrateType)) {
case AudioManager.VIBRATE_SETTING_ON:
- return getRingerModeInternal() != AudioManager.RINGER_MODE_SILENT;
+ return getRingerModeExternal() != AudioManager.RINGER_MODE_SILENT;
case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
- return getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE;
+ return getRingerModeExternal() == AudioManager.RINGER_MODE_VIBRATE;
case AudioManager.VIBRATE_SETTING_OFF:
// return false, even for incoming calls
diff --git a/services/core/java/com/android/server/MmsServiceBroker.java b/services/core/java/com/android/server/MmsServiceBroker.java
index 83b1919..0de6a03 100644
--- a/services/core/java/com/android/server/MmsServiceBroker.java
+++ b/services/core/java/com/android/server/MmsServiceBroker.java
@@ -35,7 +35,7 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
-import android.provider.Telephony;
+import android.service.carrier.CarrierMessagingService;
import android.telephony.TelephonyManager;
import android.util.Slog;
@@ -230,7 +230,7 @@
return;
}
contentUri = adjustUriForUserAndGrantPermission(contentUri,
- Telephony.Mms.Intents.MMS_SEND_ACTION,
+ CarrierMessagingService.SERVICE_INTERFACE,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
getServiceGuarded().sendMessage(subId, callingPkg, contentUri, locationUrl,
configOverrides, sentIntent);
@@ -248,7 +248,7 @@
return;
}
contentUri = adjustUriForUserAndGrantPermission(contentUri,
- Telephony.Mms.Intents.MMS_DOWNLOAD_ACTION,
+ CarrierMessagingService.SERVICE_INTERFACE,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getServiceGuarded().downloadMessage(subId, callingPkg, locationUrl, contentUri,
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
index 1486fee..55917fc 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecController.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -331,12 +331,13 @@
/**
* Configure ARC circuit in the hardware logic to start or stop the feature.
*
+ * @param port ID of HDMI port to which AVR is connected
* @param enabled whether to enable/disable ARC
*/
@ServiceThreadOnly
- void setAudioReturnChannel(boolean enabled) {
+ void setAudioReturnChannel(int port, boolean enabled) {
assertRunOnServiceThread();
- nativeSetAudioReturnChannel(mNativePtr, enabled);
+ nativeSetAudioReturnChannel(mNativePtr, port, enabled);
}
/**
@@ -633,6 +634,6 @@
private static native int nativeGetVendorId(long controllerPtr);
private static native HdmiPortInfo[] nativeGetPortInfos(long controllerPtr);
private static native void nativeSetOption(long controllerPtr, int flag, int value);
- private static native void nativeSetAudioReturnChannel(long controllerPtr, boolean flag);
+ private static native void nativeSetAudioReturnChannel(long controllerPtr, int port, boolean flag);
private static native boolean nativeIsConnected(long controllerPtr, int port);
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 62de534..e6990c6 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -827,7 +827,7 @@
HdmiLogger.debug("Set Arc Status[old:%b new:%b]", mArcEstablished, enabled);
boolean oldStatus = mArcEstablished;
// 1. Enable/disable ARC circuit.
- mService.setAudioReturnChannel(enabled);
+ mService.setAudioReturnChannel(getAvrDeviceInfo().getPortId(), enabled);
// 2. Notify arc status to audio service.
notifyArcStatusToAudioService(enabled);
// 3. Update arc status;
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 0322ae6..8ce6caf 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -756,8 +756,8 @@
return dispatchMessageToLocalDevice(message);
}
- void setAudioReturnChannel(boolean enabled) {
- mCecController.setAudioReturnChannel(enabled);
+ void setAudioReturnChannel(int portId, boolean enabled) {
+ mCecController.setAudioReturnChannel(portId, enabled);
}
@ServiceThreadOnly
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 650f0e2..825627f 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -927,7 +927,7 @@
Settings.Global.DEVICE_PROVISIONED, 0)) {
mDisableNotificationEffects = true;
}
- mZenModeHelper.updateZenMode();
+ mZenModeHelper.readZenModeFromSetting();
mUserProfiles.updateCache(getContext());
listenForCallState();
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 0f9a59b..841fc21 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -221,21 +221,26 @@
}
public void setZenMode(int zenMode, String reason) {
- ZenLog.traceSetZenMode(zenMode, reason);
- Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, zenMode);
+ setZenMode(zenMode, reason, true);
}
- public void updateZenMode() {
- final int oldMode = mZenMode;
+ private void setZenMode(int zenMode, String reason, boolean setRingerMode) {
+ ZenLog.traceSetZenMode(zenMode, reason);
+ if (mZenMode == zenMode) return;
+ ZenLog.traceUpdateZenMode(mZenMode, zenMode);
+ mZenMode = zenMode;
+ Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, mZenMode);
+ if (setRingerMode) {
+ applyZenToRingerMode();
+ }
+ applyRestrictions();
+ mHandler.postDispatchOnZenModeChanged();
+ }
+
+ public void readZenModeFromSetting() {
final int newMode = Global.getInt(mContext.getContentResolver(),
Global.ZEN_MODE, Global.ZEN_MODE_OFF);
- if (oldMode != newMode) {
- ZenLog.traceUpdateZenMode(oldMode, newMode);
- }
- mZenMode = newMode;
- applyRestrictions();
- onZenUpdated(oldMode, newMode);
- dispatchOnZenModeChanged();
+ setZenMode(newMode, "setting");
}
private void applyRestrictions() {
@@ -297,18 +302,16 @@
dispatchOnConfigChanged();
final String val = Integer.toString(mConfig.hashCode());
Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
- updateZenMode();
+ applyRestrictions();
return true;
}
- private void onZenUpdated(int oldZen, int newZen) {
+ private void applyZenToRingerMode() {
if (mAudioManager == null) return;
- if (oldZen == newZen) return;
-
// force the ringer mode into compliance
final int ringerModeInternal = mAudioManager.getRingerModeInternal();
int newRingerModeInternal = ringerModeInternal;
- switch (newZen) {
+ switch (mZenMode) {
case Global.ZEN_MODE_NO_INTERRUPTIONS:
if (ringerModeInternal != AudioManager.RINGER_MODE_SILENT) {
mPreviousRingerMode = ringerModeInternal;
@@ -337,7 +340,7 @@
int ringerModeExternalOut = ringerModeNew;
int newZen = -1;
- switch(ringerModeNew) {
+ switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT:
if (isChange) {
if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) {
@@ -356,7 +359,7 @@
break;
}
if (newZen != -1) {
- mHandler.postSetZenMode(newZen, "ringerModeInternal");
+ setZenMode(newZen, "ringerModeInternal", false /*setRingerMode*/);
}
if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) {
@@ -374,7 +377,7 @@
final boolean isVibrate = ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE;
int newZen = -1;
- switch(ringerModeNew) {
+ switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT:
if (isChange) {
if (mZenMode == Global.ZEN_MODE_OFF) {
@@ -394,7 +397,7 @@
break;
}
if (newZen != -1) {
- mHandler.postSetZenMode(newZen, "ringerModeExternal");
+ setZenMode(newZen, "ringerModeExternal", false /*setRingerMode*/);
}
ZenLog.traceSetRingerModeExternal(ringerModeOld, ringerModeNew, caller, ringerModeInternal,
@@ -516,27 +519,28 @@
public void update(Uri uri) {
if (ZEN_MODE.equals(uri)) {
- updateZenMode();
+ readZenModeFromSetting();
}
}
}
private class H extends Handler {
- private static final int MSG_SET_ZEN = 1;
+ private static final int MSG_DISPATCH = 1;
private H(Looper looper) {
super(looper);
}
- private void postSetZenMode(int zen, String reason) {
- obtainMessage(MSG_SET_ZEN, zen, 0, reason).sendToTarget();
+ private void postDispatchOnZenModeChanged() {
+ removeMessages(MSG_DISPATCH);
+ sendEmptyMessage(MSG_DISPATCH);
}
@Override
public void handleMessage(Message msg) {
- switch(msg.what) {
- case MSG_SET_ZEN:
- setZenMode(msg.arg1, (String) msg.obj);
+ switch (msg.what) {
+ case MSG_DISPATCH:
+ dispatchOnZenModeChanged();
break;
}
}
diff --git a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
index 5c557b6..a35af91 100644
--- a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
+++ b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
@@ -62,7 +62,7 @@
// Set a flag and its value.
void setOption(int flag, int value);
// Set audio return channel status.
- void setAudioReturnChannel(bool flag);
+ void setAudioReturnChannel(int port, bool flag);
// Whether to hdmi device is connected to the given port.
bool isConnected(int port);
@@ -260,8 +260,8 @@
}
// Set audio return channel status.
-void HdmiCecController::setAudioReturnChannel(bool enabled) {
- mDevice->set_audio_return_channel(mDevice, enabled ? 1 : 0);
+ void HdmiCecController::setAudioReturnChannel(int port, bool enabled) {
+ mDevice->set_audio_return_channel(mDevice, port, enabled ? 1 : 0);
}
// Whether to hdmi device is connected to the given port.
@@ -374,9 +374,9 @@
}
static void nativeSetAudioReturnChannel(JNIEnv* env, jclass clazz, jlong controllerPtr,
- jboolean enabled) {
+ jint port, jboolean enabled) {
HdmiCecController* controller = reinterpret_cast<HdmiCecController*>(controllerPtr);
- controller->setAudioReturnChannel(enabled == JNI_TRUE);
+ controller->setAudioReturnChannel(port, enabled == JNI_TRUE);
}
static jboolean nativeIsConnected(JNIEnv* env, jclass clazz, jlong controllerPtr, jint port) {
@@ -399,7 +399,7 @@
"(J)[Landroid/hardware/hdmi/HdmiPortInfo;",
(void *) nativeGetPortInfos },
{ "nativeSetOption", "(JII)V", (void *) nativeSetOption },
- { "nativeSetAudioReturnChannel", "(JZ)V", (void *) nativeSetAudioReturnChannel },
+ { "nativeSetAudioReturnChannel", "(JIZ)V", (void *) nativeSetAudioReturnChannel },
{ "nativeIsConnected", "(JI)Z", (void *) nativeIsConnected },
};
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index 4ff6389..ba07a95 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -1503,7 +1503,7 @@
int digit = Character.digit(c, 10);
if (digit != -1) {
sb.append(digit);
- } else if (i == 0 && c == '+') {
+ } else if (sb.length() == 0 && c == '+') {
sb.append(c);
} else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));