summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcore/java/android/speech/tts/TextToSpeech.java80
-rw-r--r--core/java/android/webkit/WebView.java8
-rw-r--r--core/jni/android_util_Process.cpp2
-rw-r--r--opengl/libs/EGL/egl.cpp8
-rw-r--r--telephony/java/com/android/internal/telephony/RIL.java1
-rw-r--r--telephony/java/com/android/internal/telephony/SMSDispatcher.java27
-rw-r--r--telephony/java/com/android/internal/telephony/WapPushOverSms.java18
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java48
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java30
9 files changed, 146 insertions, 76 deletions
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index c064284942d4..bc016a717f6d 100755
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -46,10 +46,6 @@ public class TextToSpeech {
* Denotes a generic operation failure.
*/
public static final int TTS_ERROR = -1;
- /**
- * Denotes a failure due to a missing resource.
- */
- public static final int TTS_ERROR_MISSING_RESOURCE = -2;
/**
* Queue mode where all entries in the playback queue (media to be played
@@ -61,6 +57,39 @@ public class TextToSpeech {
*/
public static final int TTS_QUEUE_ADD = 1;
+
+ /**
+ * Denotes the language is available exactly as specified by the locale
+ */
+ public static final int TTS_LANG_COUNTRY_VAR_AVAILABLE = 2;
+
+
+ /**
+ * Denotes the language is available for the language and country specified
+ * by the locale, but not the variant.
+ */
+ public static final int TTS_LANG_COUNTRY_AVAILABLE = 1;
+
+
+ /**
+ * Denotes the language is available for the language by the locale,
+ * but not the country and variant.
+ */
+ public static final int TTS_LANG_AVAILABLE = 0;
+
+ /**
+ * Denotes the language data is missing.
+ */
+ public static final int TTS_LANG_MISSING_DATA = -1;
+
+ /**
+ * Denotes the language is not supported by the current TTS engine.
+ */
+ public static final int TTS_LANG_NOT_SUPPORTED = -2;
+
+
+
+
/**
* Called when the TTS has initialized.
*
@@ -141,16 +170,6 @@ public class TextToSpeech {
}
- private boolean dataFilesCheck() {
- // TODO #TTS# config manager will be in settings
- Log.i("TTS_FIXME", "FIXME in Tts: config manager will be in settings");
- // TODO #TTS# implement checking of the correct installation of
- // the data files.
-
- return true;
- }
-
-
private void initTts() {
mStarted = false;
@@ -353,6 +372,27 @@ public class TextToSpeech {
/**
+ * Speaks the IPA string using the specified queuing strategy and speech
+ * parameters. Note that the speech parameters are not universally supported
+ * by all engines and will be treated as a hint. The TTS library will try to
+ * fulfill these parameters as much as possible, but there is no guarantee
+ * that the voice used will have the properties specified.
+ *
+ * @param ipaText
+ * The string of IPA text to be spoken.
+ * @param queueMode
+ * The queuing strategy to use.
+ * See TTS_QUEUE_ADD and TTS_QUEUE_FLUSH.
+ * @param params
+ * The hashmap of speech parameters to be used.
+ */
+ public void speakIpa(String ipaText, int queueMode, HashMap<String,String> params)
+ {
+ //TODO: Implement speakIpa
+ }
+
+
+ /**
* Plays the earcon using the specified queueing mode and parameters.
*
* @param earcon
@@ -537,6 +577,18 @@ public class TextToSpeech {
}
}
+ /**
+ * Checks if the specified language as represented by the locale is available.
+ *
+ * @param loc
+ * The locale describing the language to be used.
+ */
+ public int isLanguageAvailable(Locale loc) {
+ //TODO: Implement isLanguageAvailable
+ return 0;
+ }
+
+
/**
* Speaks the given text using the specified queueing mode and parameters.
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index ffd4d90070c4..429f0f96f9d2 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -4571,9 +4571,11 @@ public class WebView extends AbsoluteLayout
break;
}
case SWITCH_TO_LONGPRESS: {
- mTouchMode = TOUCH_DONE_MODE;
- performLongClick();
- updateTextEntry();
+ if (!mPreventDrag) {
+ mTouchMode = TOUCH_DONE_MODE;
+ performLongClick();
+ updateTextEntry();
+ }
break;
}
case SWITCH_TO_ENTER:
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 945a325234d9..c890b0fbc384 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -496,7 +496,7 @@ void android_os_Process_readProcLines(JNIEnv* env, jobject clazz, jstring fileSt
const String8& field = fields[i];
if (strncmp(p, field.string(), field.length()) == 0) {
p += field.length();
- while (*p == ' ') p++;
+ while (*p == ' ' || *p == '\t') p++;
char* num = p;
while (*p >= '0' && *p <= '9') p++;
skipToEol = *p != '\n';
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index 25e31ee7f271..de323b392a9e 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -1052,23 +1052,25 @@ EGLBoolean eglMakeCurrent( EGLDisplay dpy, EGLSurface draw,
if (!validate_display_context(dpy, ctx))
return EGL_FALSE;
+ EGLSurface impl_draw = EGL_NO_SURFACE;
+ EGLSurface impl_read = EGL_NO_SURFACE;
egl_context_t * const c = get_context(ctx);
if (draw != EGL_NO_SURFACE) {
egl_surface_t const * d = get_surface(draw);
if (!d) return setError(EGL_BAD_SURFACE, EGL_FALSE);
if (d->impl != c->impl)
return setError(EGL_BAD_MATCH, EGL_FALSE);
- draw = d->surface;
+ impl_draw = d->surface;
}
if (read != EGL_NO_SURFACE) {
egl_surface_t const * r = get_surface(read);
if (!r) return setError(EGL_BAD_SURFACE, EGL_FALSE);
if (r->impl != c->impl)
return setError(EGL_BAD_MATCH, EGL_FALSE);
- read = r->surface;
+ impl_read = r->surface;
}
EGLBoolean result = c->cnx->hooks->egl.eglMakeCurrent(
- dp->dpys[c->impl], draw, read, c->context);
+ dp->dpys[c->impl], impl_draw, impl_read, c->context);
if (result == EGL_TRUE) {
setGlThreadSpecific(c->cnx->hooks);
diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java
index 9f780c91ab5c..4db3e5bfcf8b 100644
--- a/telephony/java/com/android/internal/telephony/RIL.java
+++ b/telephony/java/com/android/internal/telephony/RIL.java
@@ -1365,7 +1365,6 @@ public final class RIL extends BaseCommands implements CommandsInterface {
RILRequest rr
= RILRequest.obtain(RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE, result);
- rr.mp.writeInt(2);
rr.mp.writeInt(success ? 0 : 1); //RIL_CDMA_SMS_ErrorClass
// cause code according to X.S004-550E
rr.mp.writeInt(cause);
diff --git a/telephony/java/com/android/internal/telephony/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
index a3016fa5c9d8..62a5d655df24 100644
--- a/telephony/java/com/android/internal/telephony/SMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
@@ -289,7 +289,13 @@ public abstract class SMSDispatcher extends Handler {
sms = (SmsMessage) ar.result;
try {
if (mStorageAvailable) {
- dispatchMessage(sms.mWrappedSmsMessage);
+ int result = dispatchMessage(sms.mWrappedSmsMessage);
+ if (result != Activity.RESULT_OK) {
+ // RESULT_OK means that message was broadcast for app(s) to handle.
+ // Any other result, we should ack here.
+ boolean handled = (result == Intents.RESULT_SMS_HANDLED);
+ acknowledgeLastIncomingSms(handled, result, null);
+ }
} else {
acknowledgeLastIncomingSms(false, Intents.RESULT_SMS_OUT_OF_MEMORY, null);
}
@@ -469,8 +475,11 @@ public abstract class SMSDispatcher extends Handler {
* Dispatches an incoming SMS messages.
*
* @param sms the incoming message from the phone
+ * @return a result code from {@link Telephony.Sms.Intents}, or
+ * {@link Activity#RESULT_OK} if the message has been broadcast
+ * to applications
*/
- protected abstract void dispatchMessage(SmsMessageBase sms);
+ protected abstract int dispatchMessage(SmsMessageBase sms);
/**
@@ -478,8 +487,11 @@ public abstract class SMSDispatcher extends Handler {
* the part is stored for later processing.
*
* NOTE: concatRef (naturally) needs to be non-null, but portAddrs can be null.
+ * @return a result code from {@link Telephony.Sms.Intents}, or
+ * {@link Activity#RESULT_OK} if the message has been broadcast
+ * to applications
*/
- protected void processMessagePart(SmsMessageBase sms,
+ protected int processMessagePart(SmsMessageBase sms,
SmsHeader.ConcatRef concatRef, SmsHeader.PortAddrs portAddrs) {
// Lookup all other related parts
@@ -506,8 +518,7 @@ public abstract class SMSDispatcher extends Handler {
values.put("destination_port", portAddrs.destPort);
}
mResolver.insert(mRawUri, values);
- acknowledgeLastIncomingSms(true, Intents.RESULT_SMS_HANDLED, null);
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
// All the parts are in place, deal with them
@@ -529,8 +540,7 @@ public abstract class SMSDispatcher extends Handler {
} catch (SQLException e) {
Log.e(TAG, "Can't access multipart SMS database", e);
// TODO: Would OUT_OF_MEMORY be more appropriate?
- acknowledgeLastIncomingSms(false, Intents.RESULT_SMS_GENERIC_ERROR, null);
- return;
+ return Intents.RESULT_SMS_GENERIC_ERROR;
} finally {
if (cursor != null) cursor.close();
}
@@ -555,7 +565,7 @@ public abstract class SMSDispatcher extends Handler {
output.write(data, 0, data.length);
}
// Handle the PUSH
- mWapPush.dispatchWapPdu(output.toByteArray());
+ return mWapPush.dispatchWapPdu(output.toByteArray());
} else {
// The messages were sent to a port, so concoct a URI for it
dispatchPortAddressedPdus(pdus, portAddrs.destPort);
@@ -564,6 +574,7 @@ public abstract class SMSDispatcher extends Handler {
// The messages were not sent to a port
dispatchPdus(pdus);
}
+ return Activity.RESULT_OK;
}
/**
diff --git a/telephony/java/com/android/internal/telephony/WapPushOverSms.java b/telephony/java/com/android/internal/telephony/WapPushOverSms.java
index a9aacdab6b28..99709406b828 100644
--- a/telephony/java/com/android/internal/telephony/WapPushOverSms.java
+++ b/telephony/java/com/android/internal/telephony/WapPushOverSms.java
@@ -16,8 +16,10 @@
package com.android.internal.telephony;
+import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.provider.Telephony;
import android.provider.Telephony.Sms.Intents;
import android.util.Config;
import android.util.Log;
@@ -51,8 +53,11 @@ public class WapPushOverSms {
* wap-230-wsp-20010705-a section 8 for details on the WAP PDU format.
*
* @param pdu The WAP PDU, made up of one or more SMS PDUs
+ * @return a result code from {@link Telephony.Sms.Intents}, or
+ * {@link Activity#RESULT_OK} if the message has been broadcast
+ * to applications
*/
- public void dispatchWapPdu(byte[] pdu) {
+ public int dispatchWapPdu(byte[] pdu) {
if (Config.LOGD) Log.d(LOG_TAG, "Rx: " + IccUtils.bytesToHexString(pdu));
@@ -64,7 +69,7 @@ public class WapPushOverSms {
if ((pduType != WspTypeDecoder.PDU_TYPE_PUSH) &&
(pduType != WspTypeDecoder.PDU_TYPE_CONFIRMED_PUSH)) {
if (Config.LOGD) Log.w(LOG_TAG, "Received non-PUSH WAP PDU. Type = " + pduType);
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
pduDecoder = new WspTypeDecoder(pdu);
@@ -77,7 +82,7 @@ public class WapPushOverSms {
*/
if (pduDecoder.decodeUintvarInteger(index) == false) {
if (Config.LOGD) Log.w(LOG_TAG, "Received PDU. Header Length error.");
- return;
+ return Intents.RESULT_SMS_GENERIC_ERROR;
}
headerLength = (int)pduDecoder.getValue32();
index += pduDecoder.getDecodedDataLength();
@@ -98,7 +103,7 @@ public class WapPushOverSms {
*/
if (pduDecoder.decodeContentType(index) == false) {
if (Config.LOGD) Log.w(LOG_TAG, "Received PDU. Header Content-Type error.");
- return;
+ return Intents.RESULT_SMS_GENERIC_ERROR;
}
int binaryContentType;
String mimeType = pduDecoder.getValueString();
@@ -128,7 +133,7 @@ public class WapPushOverSms {
Log.w(LOG_TAG,
"Received PDU. Unsupported Content-Type = " + binaryContentType);
}
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
} else {
if (mimeType.equals(WspTypeDecoder.CONTENT_MIME_TYPE_B_DRM_RIGHTS_XML)) {
@@ -145,7 +150,7 @@ public class WapPushOverSms {
binaryContentType = WspTypeDecoder.CONTENT_TYPE_B_MMS;
} else {
if (Config.LOGD) Log.w(LOG_TAG, "Received PDU. Unknown Content-Type = " + mimeType);
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
}
index += pduDecoder.getDecodedDataLength();
@@ -167,6 +172,7 @@ public class WapPushOverSms {
if (dispatchedByApplication == false) {
dispatchWapPdu_default(pdu, transactionId, pduType, mimeType, dataIndex);
}
+ return Activity.RESULT_OK;
}
private void dispatchWapPdu_default(
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
index 8a0070de335b..2d43e0dedb47 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
@@ -25,6 +25,7 @@ import android.database.Cursor;
import android.database.SQLException;
import android.os.AsyncResult;
import android.os.Message;
+import android.provider.Telephony;
import android.provider.Telephony.Sms.Intents;
import android.preference.PreferenceManager;
import android.util.Config;
@@ -66,17 +67,12 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
Log.d(TAG, "handleStatusReport is a special GSM function, should never be called in CDMA!");
}
- /**
- * Dispatches an incoming SMS messages.
- *
- * @param smsb the incoming message from the phone
- */
- protected void dispatchMessage(SmsMessageBase smsb) {
+ /** {@inheritDoc} */
+ protected int dispatchMessage(SmsMessageBase smsb) {
// If sms is null, means there was a parsing error.
- // TODO: Should NAK this.
if (smsb == null) {
- return;
+ return Intents.RESULT_SMS_GENERIC_ERROR;
}
// Decode BD stream and set sms variables.
@@ -92,11 +88,13 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
handled = true;
}
- if (handled) return;
+ if (handled) {
+ return Intents.RESULT_SMS_HANDLED;
+ }
if (SmsEnvelope.TELESERVICE_WAP == teleService){
- processCdmaWapPdu(sms.getUserData(), sms.messageRef, sms.getOriginatingAddress());
- return;
+ return processCdmaWapPdu(sms.getUserData(), sms.messageRef,
+ sms.getOriginatingAddress());
} else if (SmsEnvelope.TELESERVICE_VMN == teleService) {
// handling Voicemail
int voicemailCount = sms.getNumOfVoicemails();
@@ -108,7 +106,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
editor.putInt(CDMAPhone.VM_COUNT_CDMA, voicemailCount);
editor.commit();
((CDMAPhone) mPhone).updateMessageWaitingIndicator(voicemailCount);
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
/**
@@ -138,17 +136,19 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
if (smsHeader != null && smsHeader.portAddrs != null) {
if (smsHeader.portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
// GSM-style WAP indication
- mWapPush.dispatchWapPdu(sms.getUserData());
+ return mWapPush.dispatchWapPdu(sms.getUserData());
+ } else {
+ // The message was sent to a port, so concoct a URI for it.
+ dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
}
- // The message was sent to a port, so concoct a URI for it.
- dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
} else {
// Normal short and non-port-addressed message, dispatch it.
dispatchPdus(pdus);
}
+ return Activity.RESULT_OK;
} else {
// Process the message part.
- processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
+ return processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
}
}
@@ -158,8 +158,11 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
* WDP segments are gathered until a datagram completes and gets dispatched.
*
* @param pdu The WAP-WDP PDU segment
+ * @return a result code from {@link Telephony.Sms.Intents}, or
+ * {@link Activity#RESULT_OK} if the message has been broadcast
+ * to applications
*/
- protected void processCdmaWapPdu(byte[] pdu, int referenceNumber, String address) {
+ protected int processCdmaWapPdu(byte[] pdu, int referenceNumber, String address) {
int segment;
int totalSegments;
int index = 0;
@@ -171,7 +174,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
msgType = pdu[index++];
if (msgType != 0){
Log.w(TAG, "Received a WAP SMS which is not WDP. Discard.");
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
totalSegments = pdu[index++]; // >=1
segment = pdu[index++]; // >=0
@@ -210,7 +213,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
mResolver.insert(mRawUri, values);
- return;
+ return Intents.RESULT_SMS_HANDLED;
}
// All the parts are in place, deal with them
@@ -230,7 +233,7 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
mResolver.delete(mRawUri, where.toString(), whereArgs);
} catch (SQLException e) {
Log.e(TAG, "Can't access multipart SMS database", e);
- return; // TODO: NACK the message or something, don't just discard.
+ return Intents.RESULT_SMS_GENERIC_ERROR;
} finally {
if (cursor != null) cursor.close();
}
@@ -250,15 +253,14 @@ final class CdmaSMSDispatcher extends SMSDispatcher {
switch (destinationPort) {
case SmsHeader.PORT_WAP_PUSH:
// Handle the PUSH
- mWapPush.dispatchWapPdu(datagram);
- break;
+ return mWapPush.dispatchWapPdu(datagram);
default:{
pdus = new byte[1][];
pdus[0] = datagram;
// The messages were sent to any other WAP port
dispatchPortAddressedPdus(pdus, destinationPort);
- break;
+ return Activity.RESULT_OK;
}
}
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
index f87392a8dacd..2770ddc349ec 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
@@ -78,24 +78,16 @@ final class GsmSMSDispatcher extends SMSDispatcher {
}
}
}
-
- if (mCm != null) {
- mCm.acknowledgeLastIncomingGsmSms(true, Intents.RESULT_SMS_HANDLED, null);
- }
+ acknowledgeLastIncomingSms(true, Intents.RESULT_SMS_HANDLED, null);
}
- /**
- * Dispatches an incoming SMS messages.
- *
- * @param sms the incoming message from the phone
- */
- protected void dispatchMessage(SmsMessageBase smsb) {
+ /** {@inheritDoc} */
+ protected int dispatchMessage(SmsMessageBase smsb) {
// If sms is null, means there was a parsing error.
- // TODO: Should NAK this.
if (smsb == null) {
- return;
+ return Intents.RESULT_SMS_GENERIC_ERROR;
}
SmsMessage sms = (SmsMessage) smsb;
boolean handled = false;
@@ -115,7 +107,9 @@ final class GsmSMSDispatcher extends SMSDispatcher {
}
}
- if (handled) return;
+ if (handled) {
+ return Intents.RESULT_SMS_HANDLED;
+ }
SmsHeader smsHeader = sms.getUserDataHeader();
// See if message is partial or port addressed.
@@ -126,17 +120,19 @@ final class GsmSMSDispatcher extends SMSDispatcher {
if (smsHeader != null && smsHeader.portAddrs != null) {
if (smsHeader.portAddrs.destPort == SmsHeader.PORT_WAP_PUSH) {
- mWapPush.dispatchWapPdu(sms.getUserData());
+ return mWapPush.dispatchWapPdu(sms.getUserData());
+ } else {
+ // The message was sent to a port, so concoct a URI for it.
+ dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
}
- // The message was sent to a port, so concoct a URI for it.
- dispatchPortAddressedPdus(pdus, smsHeader.portAddrs.destPort);
} else {
// Normal short and non-port-addressed message, dispatch it.
dispatchPdus(pdus);
}
+ return Activity.RESULT_OK;
} else {
// Process the message part.
- processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
+ return processMessagePart(sms, smsHeader.concatRef, smsHeader.portAddrs);
}
}