summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.xml26
-rw-r--r--core/java/android/content/CursorLoader.java13
-rw-r--r--core/java/android/os/StrictMode.java113
-rw-r--r--core/java/android/provider/Mtp.java8
-rw-r--r--core/java/android/provider/Settings.java7
-rw-r--r--core/java/android/util/Base64InputStream.java2
-rw-r--r--core/java/android/webkit/WebViewCore.java4
-rw-r--r--core/res/res/values/dimens.xml2
-rw-r--r--core/tests/coretests/src/android/util/Base64Test.java11
-rw-r--r--graphics/java/android/renderscript/Mesh.java2
-rw-r--r--libs/rs/rs.spec4
-rw-r--r--libs/rs/rsMesh.cpp2
-rw-r--r--libs/rs/rsProgramFragment.cpp2
-rw-r--r--libs/rs/rsScriptC.cpp45
-rw-r--r--media/java/android/media/MtpClient.java16
-rw-r--r--media/java/android/media/MtpCursor.java8
-rw-r--r--media/jni/android_media_MtpClient.cpp20
-rw-r--r--media/jni/android_media_MtpCursor.cpp4
-rw-r--r--media/libstagefright/codecs/avc/dec/AVCDecoder.cpp96
-rw-r--r--media/libstagefright/include/AVCDecoder.h2
-rw-r--r--media/libstagefright/omx/tests/OMXHarness.cpp2
-rw-r--r--media/tests/CameraBrowser/Android.mk2
-rw-r--r--media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectBrowser.java12
-rw-r--r--media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectViewer.java8
-rw-r--r--media/tests/CameraBrowser/src/com/android/camerabrowser/StorageBrowser.java2
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java29
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java21
-rw-r--r--opengl/libs/EGL/egl.cpp14
-rw-r--r--opengl/tests/testLatency/Android.mk20
-rw-r--r--opengl/tests/testLatency/AndroidManifest.xml37
-rw-r--r--opengl/tests/testLatency/res/values/strings.xml29
-rw-r--r--opengl/tests/testLatency/src/com/android/testlatency/TestLatencyActivity.java47
-rw-r--r--opengl/tests/testLatency/src/com/android/testlatency/TestLatencyView.java267
-rw-r--r--packages/SettingsProvider/res/values/defaults.xml27
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java41
-rwxr-xr-xservices/java/com/android/server/location/GpsLocationProvider.java9
-rw-r--r--services/java/com/android/server/sip/SipService.java6
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java33
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java35
-rwxr-xr-xtests/DumpRenderTree2/assets/run_apache2.py7
-rw-r--r--tests/DumpRenderTree2/src/com/android/dumprendertree2/AbstractResult.java2
-rw-r--r--tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java38
42 files changed, 865 insertions, 210 deletions
diff --git a/api/current.xml b/api/current.xml
index 51315ab..c43ebac 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -46584,6 +46584,21 @@
<parameter name="cursor" type="android.database.Cursor">
</parameter>
</method>
+<method name="registerContentObserver"
+ return="void"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="cursor" type="android.database.Cursor">
+</parameter>
+<parameter name="observer" type="android.database.ContentObserver">
+</parameter>
+</method>
<method name="setProjection"
return="void"
abstract="false"
@@ -157268,6 +157283,17 @@
visibility="public"
>
</field>
+<field name="AUTO_TIME_ZONE"
+ type="java.lang.String"
+ transient="false"
+ volatile="false"
+ value="&quot;auto_time_zone&quot;"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="BLUETOOTH_DISCOVERABILITY"
type="java.lang.String"
transient="false"
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 42599ed..7776874 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -16,6 +16,7 @@
package android.content;
+import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -37,14 +38,22 @@ public class CursorLoader extends AsyncTaskLoader<Cursor> {
public Cursor loadInBackground() {
Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
mSelectionArgs, mSortOrder);
- // Ensure the cursor window is filled
if (cursor != null) {
+ // Ensure the cursor window is filled
cursor.getCount();
- cursor.registerContentObserver(mObserver);
+ registerContentObserver(cursor, mObserver);
}
return cursor;
}
+ /**
+ * Registers an observer to get notifications from the content provider
+ * when the cursor needs to be refreshed.
+ */
+ public void registerContentObserver(Cursor cursor, ContentObserver observer) {
+ cursor.registerContentObserver(mObserver);
+ }
+
/* Runs on the UI thread */
@Override
public void deliverResult(Cursor cursor) {
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index f571c42..3ddaad9 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -30,8 +30,59 @@ import java.util.ArrayList;
import java.util.HashMap;
/**
- * <p>StrictMode lets you impose stricter rules under which your
- * application runs.</p>
+ * <p>StrictMode is a developer tool which lets you impose stricter
+ * rules under which your application runs.
+ *
+ * <p>StrictMode is most commonly used to catch accidental disk or
+ * network access on the application's main thread, where UI
+ * operations are received and animations take place. Keeping disk
+ * and network operations off the main thread makes for much smoother,
+ * more responsive applications.
+ *
+ * <p class="note">Note that even though an Android device's disk is
+ * often on flash memory, many devices run a filesystem on top of that
+ * memory with very limited concurrency. It's often the case that
+ * almost all disk accesses are fast, but may in individual cases be
+ * dramatically slower when certain I/O is happening in the background
+ * from other processes. If possible, it's best to assume that such
+ * things are not fast.</p>
+ *
+ * <p>Example code to enable from early in your
+ * {@link android.app.Application}, {@link android.app.Activity}, or
+ * other application component's
+ * {@link android.app.Application#onCreate} method:
+ *
+ * <pre>
+ * public void onCreate() {
+ * if (DEVELOPER_MODE) {
+ * StrictMode.setThreadPolicy(StrictMode.DISALLOW_DISK_WRITE |
+ * StrictMode.DISALLOW_DISK_READ |
+ * StrictMode.DISALLOW_NETWORK |
+ * StrictMode.PENALTY_LOG);
+ * }
+ * super.onCreate();
+ * }
+ * </pre>
+ *
+ * <p>Then you can watch the output of <code>adb logcat</code> while you
+ * use your application.
+ *
+ * <p>If you find violations that you feel are problematic, there are
+ * a variety of tools to help solve them: threads, {@link android.os.Handler},
+ * {@link android.os.AsyncTask}, {@link android.app.IntentService}, etc.
+ * But don't feel compelled to fix everything that StrictMode finds. In particular,
+ * a lot of disk accesses are often necessary during the normal activity lifecycle. Use
+ * StrictMode to find things you did on accident. Network requests on the UI thread
+ * are almost always a problem, though.
+ *
+ * <p class="note">StrictMode is not a security mechanism and is not
+ * guaranteed to find all disk or network accesses. While it does
+ * propagate its state across process boundaries when doing
+ * {@link android.os.Binder} calls, it's still ultimately a best
+ * effort mechanism. Notably, disk or network access from JNI calls
+ * won't necessarily trigger it. Future versions of Android may catch
+ * more (or fewer) operations, so you should never leave StrictMode
+ * enabled in shipping applications on the Android Market.
*/
public final class StrictMode {
private static final String TAG = "StrictMode";
@@ -45,8 +96,22 @@ public final class StrictMode {
private StrictMode() {}
+ /**
+ * Flag for {@link #setThreadPolicy} to signal that you don't intend for this
+ * thread to write to disk.
+ */
public static final int DISALLOW_DISK_WRITE = 0x01;
+
+ /**
+ * Flag for {@link #setThreadPolicy} to signal that you don't intend for this
+ * thread to read from disk.
+ */
public static final int DISALLOW_DISK_READ = 0x02;
+
+ /**
+ * Flag for {@link #setThreadPolicy} to signal that you don't intend for this
+ * thread to access the network.
+ */
public static final int DISALLOW_NETWORK = 0x04;
/** @hide */
@@ -54,23 +119,30 @@ public final class StrictMode {
DISALLOW_DISK_WRITE | DISALLOW_DISK_READ | DISALLOW_NETWORK;
/**
- * Flag to log to the system log.
+ * Penalty flag for {@link #setThreadPolicy} to log violations to
+ * the system log, visible with <code>adb logcat</code>.
*/
public static final int PENALTY_LOG = 0x10; // normal android.util.Log
/**
- * Show an annoying dialog to the user. Will be rate-limited to be only
- * a little annoying.
+ * Penalty flag for {@link #setThreadPolicy} to show an annoying
+ * dialog to the developer, rate-limited to be only a little
+ * annoying.
*/
public static final int PENALTY_DIALOG = 0x20;
/**
- * Crash hard if policy is violated.
+ * Penalty flag for {@link #setThreadPolicy} to crash hard if
+ * policy is violated.
*/
public static final int PENALTY_DEATH = 0x40;
/**
- * Log a stacktrace to the DropBox on policy violation.
+ * Penalty flag for {@link #setThreadPolicy} to log a stacktrace
+ * and timing data to the
+ * {@link android.os.DropBoxManager DropBox} on policy violation.
+ * Intended mostly for platform integrators doing beta user field
+ * data collection.
*/
public static final int PENALTY_DROPBOX = 0x80;
@@ -109,10 +181,17 @@ public final class StrictMode {
};
/**
- * Sets the policy for what actions the current thread is denied,
- * as well as the penalty for violating the policy.
+ * Sets the policy for what actions the current thread isn't
+ * expected to do, as well as the penalty if it does.
+ *
+ * <p>Internally this sets a thread-local integer which is
+ * propagated across cross-process IPC calls, meaning you can
+ * catch violations when a system service or another process
+ * accesses the disk or network on your behalf.
*
- * @param policyMask a bitmask of DISALLOW_* and PENALTY_* values.
+ * @param policyMask a bitmask of DISALLOW_* and PENALTY_* values,
+ * e.g. {@link #DISALLOW_DISK_READ}, {@link #DISALLOW_DISK_WRITE},
+ * {@link #DISALLOW_NETWORK}, {@link #PENALTY_LOG}.
*/
public static void setThreadPolicy(final int policyMask) {
// In addition to the Java-level thread-local in Dalvik's
@@ -160,7 +239,7 @@ public final class StrictMode {
}
/**
- * Returns the bitmask of the current thread's blocking policy.
+ * Returns the bitmask of the current thread's policy.
*
* @return the bitmask of all the DISALLOW_* and PENALTY_* bits currently enabled
*/
@@ -169,8 +248,10 @@ public final class StrictMode {
}
/**
- * Updates the current thread's policy mask to allow reading &amp;
- * writing to disk.
+ * A convenience wrapper around {@link #getThreadPolicy} and
+ * {@link #setThreadPolicy}. Updates the current thread's policy
+ * mask to allow both reading &amp; writing to disk, returning the
+ * old policy so you can restore it at the end of a block.
*
* @return the old policy mask, to be passed to setThreadPolicy to
* restore the policy.
@@ -185,8 +266,10 @@ public final class StrictMode {
}
/**
- * Updates the current thread's policy mask to allow reading from
- * disk.
+ * A convenience wrapper around {@link #getThreadPolicy} and
+ * {@link #setThreadPolicy}. Updates the current thread's policy
+ * mask to allow reading from disk, returning the old
+ * policy so you can restore it at the end of a block.
*
* @return the old policy mask, to be passed to setThreadPolicy to
* restore the policy.
diff --git a/core/java/android/provider/Mtp.java b/core/java/android/provider/Mtp.java
index bba54e1..de161e7 100644
--- a/core/java/android/provider/Mtp.java
+++ b/core/java/android/provider/Mtp.java
@@ -75,7 +75,7 @@ public final class Mtp
return Uri.parse(CONTENT_AUTHORITY_DEVICE_SLASH + deviceID + "/storage");
}
- public static Uri getContentUri(int deviceID, int storageID) {
+ public static Uri getContentUri(int deviceID, long storageID) {
return Uri.parse(CONTENT_AUTHORITY_DEVICE_SLASH + deviceID + "/storage/" + storageID);
}
@@ -97,17 +97,17 @@ public final class Mtp
*/
public static final class Object implements BaseColumns {
- public static Uri getContentUri(int deviceID, int objectID) {
+ public static Uri getContentUri(int deviceID, long objectID) {
return Uri.parse(CONTENT_AUTHORITY_DEVICE_SLASH + deviceID
+ "/object/" + objectID);
}
- public static Uri getContentUriForObjectChildren(int deviceID, int objectID) {
+ public static Uri getContentUriForObjectChildren(int deviceID, long objectID) {
return Uri.parse(CONTENT_AUTHORITY_DEVICE_SLASH + deviceID
+ "/object/" + objectID + "/child");
}
- public static Uri getContentUriForStorageChildren(int deviceID, int storageID) {
+ public static Uri getContentUriForStorageChildren(int deviceID, long storageID) {
return Uri.parse(CONTENT_AUTHORITY_DEVICE_SLASH + deviceID
+ "/storage/" + storageID + "/child");
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4d87b79..51dc6ae 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1494,6 +1494,12 @@ public final class Settings {
public static final String AUTO_TIME = "auto_time";
/**
+ * Value to specify if the user prefers the time zone
+ * to be automatically fetched from the network (NITZ). 1=yes, 0=no
+ */
+ public static final String AUTO_TIME_ZONE = "auto_time_zone";
+
+ /**
* Display times as 12 or 24 hours
* 12
* 24
@@ -1775,6 +1781,7 @@ public final class Settings {
TEXT_AUTO_PUNCTUATE,
TEXT_SHOW_PASSWORD,
AUTO_TIME,
+ AUTO_TIME_ZONE,
TIME_12_24,
DATE_FORMAT,
ACCELEROMETER_ROTATION,
diff --git a/core/java/android/util/Base64InputStream.java b/core/java/android/util/Base64InputStream.java
index da3911d..e9dac24 100644
--- a/core/java/android/util/Base64InputStream.java
+++ b/core/java/android/util/Base64InputStream.java
@@ -112,7 +112,7 @@ public class Base64InputStream extends FilterInputStream {
if (outputStart >= outputEnd) {
return -1;
} else {
- return coder.output[outputStart++];
+ return coder.output[outputStart++] & 0xff;
}
}
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index af7d95e..bb43690 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1829,9 +1829,11 @@ final class WebViewCore {
draw.mViewState = mInitialViewState;
if (mViewportWidth == -1 && mSettings.getUseFixedViewport() &&
mSettings.getUseWideViewPort()) {
+ final int fixedViewportMargin = mContext.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.fixed_viewport_margin);
// Use website's initial preferred width as the fixed viewport width.
mViewportWidth = Math.min(mSettings.getMaxFixedViewportWidth(),
- Math.max(draw.mWidthHeight.x, draw.mMinPrefWidth));
+ draw.mMinPrefWidth + 2 * fixedViewportMargin);
draw.mViewState.mViewportWidth = mViewportWidth;
}
mInitialViewState = null;
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 539a986..171bb45 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -45,6 +45,8 @@
<dimen name="fastscroll_thumb_height">52dp</dimen>
<!-- Min width for a tablet device -->
<dimen name="min_xlarge_screen_width">800dp</dimen>
+ <!-- Fixed viewport margin for website content width change -->
+ <dimen name="fixed_viewport_margin">7dp</dimen>
<!-- Default height of a key in the password keyboard for alpha -->
<dimen name="password_keyboard_key_height_alpha">56dip</dimen>
<!-- Default height of a key in the password keyboard for numeric -->
diff --git a/core/tests/coretests/src/android/util/Base64Test.java b/core/tests/coretests/src/android/util/Base64Test.java
index 0f5b090..53368d4 100644
--- a/core/tests/coretests/src/android/util/Base64Test.java
+++ b/core/tests/coretests/src/android/util/Base64Test.java
@@ -16,6 +16,9 @@
package android.util;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
@@ -404,6 +407,14 @@ public class Base64Test extends TestCase {
}
}
+ /** http://b/3026478 */
+ public void testSingleByteReads() throws IOException {
+ InputStream in = new Base64InputStream(
+ new ByteArrayInputStream("/v8=".getBytes()), Base64.DEFAULT);
+ assertEquals(254, in.read());
+ assertEquals(255, in.read());
+ }
+
/**
* Tests that Base64OutputStream produces exactly the same results
* as calling Base64.encode/.decode on an in-memory array.
diff --git a/graphics/java/android/renderscript/Mesh.java b/graphics/java/android/renderscript/Mesh.java
index b74c1f8..d36b2f1 100644
--- a/graphics/java/android/renderscript/Mesh.java
+++ b/graphics/java/android/renderscript/Mesh.java
@@ -69,7 +69,7 @@ public class Mesh extends BaseObj {
int[] primitives = new int[idxCount];
mRS.nMeshGetVertices(mID, vtxIDs, vtxCount);
- mRS.nMeshGetIndices(mID, idxIDs, primitives, vtxCount);
+ mRS.nMeshGetIndices(mID, idxIDs, primitives, idxCount);
mVertexBuffers = new Allocation[vtxCount];
mIndexBuffers = new Allocation[idxCount];
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 31d70c7..21cbc50 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -354,10 +354,6 @@ ScriptSetVarV {
}
-ScriptCSetScript {
- param void * codePtr
- }
-
ScriptCSetText {
param const char * text
param uint32_t length
diff --git a/libs/rs/rsMesh.cpp b/libs/rs/rsMesh.cpp
index 810e4ff..8e43f24 100644
--- a/libs/rs/rsMesh.cpp
+++ b/libs/rs/rsMesh.cpp
@@ -124,8 +124,6 @@ void Mesh::uploadAll(Context *rsc)
mPrimitives[ct]->mIndexBuffer->deferedUploadToBufferObject(rsc);
}
}
-
- rsc->checkError("Mesh::uploadAll");
}
void Mesh::updateGLPrimitives()
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index 9817fca..8f5c653 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -78,8 +78,6 @@ ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText,
mConstantColor[2] = 1.f;
mConstantColor[3] = 1.f;
- LOGE("Custom FP");
-
mTextureEnableMask = (1 << mTextureCount) -1;
init(rsc);
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index cbc5df9..4b484b1 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -67,12 +67,15 @@ void ScriptC::setupScript(Context *rsc)
ptr = mSlots[ct]->getPtr();
}
void **dest = ((void ***)mEnviroment.mFieldAddress)[ct];
- //LOGE("setupScript %i %p = %p %p %i", ct, dest, ptr, mSlots[ct]->getType(), mSlots[ct]->getType()->getDimX());
- //const uint32_t *p32 = (const uint32_t *)ptr;
- //for (uint32_t ct2=0; ct2 < mSlots[ct]->getType()->getDimX(); ct2++) {
- //LOGE(" %i = 0x%08x ", ct2, p32[ct2]);
- //}
+ if (rsc->props.mLogScripts) {
+ LOGV("%p ScriptC::setupScript slot=%i dst=%p src=%p type=%p", rsc, ct, dest, ptr, mSlots[ct]->getType());
+
+ //const uint32_t *p32 = (const uint32_t *)ptr;
+ //for (uint32_t ct2=0; ct2 < mSlots[ct]->getType()->getDimX(); ct2++) {
+ //LOGE(" %i = 0x%08x ", ct2, p32[ct2]);
+ //}
+ }
if (dest) {
*dest = ptr;
@@ -136,10 +139,18 @@ uint32_t ScriptC::run(Context *rsc)
uint32_t ret = 0;
Script * oldTLS = setTLS(this);
- //LOGE("ScriptC::run %p", mProgram.mRoot);
+
+ if (rsc->props.mLogScripts) {
+ LOGV("%p ScriptC::run invoking root, ptr %p", rsc, mProgram.mRoot);
+ }
+
ret = mProgram.mRoot();
+
+ if (rsc->props.mLogScripts) {
+ LOGV("%p ScriptC::run invoking complete, ret=%i", rsc, ret);
+ }
+
setTLS(oldTLS);
- //LOGE("ScriptC::run ret %i", ret);
return ret;
}
@@ -325,8 +336,14 @@ void ScriptC::Invoke(Context *rsc, uint32_t slot, const void *data, uint32_t len
setupScript(rsc);
Script * oldTLS = setTLS(this);
+ if (rsc->props.mLogScripts) {
+ LOGV("%p ScriptC::Invoke invoking slot %i, ptr %p", rsc, slot, mEnviroment.mInvokeFunctions[slot]);
+ }
((void (*)(const void *, uint32_t))
mEnviroment.mInvokeFunctions[slot])(data, len);
+ if (rsc->props.mLogScripts) {
+ LOGV("%p ScriptC::Invoke complete", rsc);
+ }
setTLS(oldTLS);
}
@@ -377,7 +394,7 @@ static BCCvoid* symbolLookup(BCCvoid* pContext, const BCCchar* name)
void ScriptCState::runCompiler(Context *rsc, ScriptC *s)
{
- LOGV("ScriptCState::runCompiler ");
+ LOGV("%p ScriptCState::runCompiler ", rsc);
s->mBccScript = bccCreateScript();
s->mEnviroment.mIsThreadable = true;
@@ -386,7 +403,7 @@ void ScriptCState::runCompiler(Context *rsc, ScriptC *s)
bccCompileScript(s->mBccScript);
bccGetScriptLabel(s->mBccScript, "root", (BCCvoid**) &s->mProgram.mRoot);
bccGetScriptLabel(s->mBccScript, "init", (BCCvoid**) &s->mProgram.mInit);
- LOGV("root %p, init %p", s->mProgram.mRoot, s->mProgram.mInit);
+ LOGV("%p ScriptCState::runCompiler root %p, init %p", rsc, s->mProgram.mRoot, s->mProgram.mInit);
if (s->mProgram.mInit) {
s->mProgram.mInit();
@@ -407,9 +424,6 @@ void ScriptCState::runCompiler(Context *rsc, ScriptC *s)
s->mEnviroment.mFieldAddress = (void **) calloc(s->mEnviroment.mFieldCount, sizeof(void *));
bccGetExportVars(s->mBccScript, NULL, s->mEnviroment.mFieldCount, (BCCvoid **) s->mEnviroment.mFieldAddress);
}
- //for (int ct2=0; ct2 < s->mEnviroment.mFieldCount; ct2++ ) {
- //LOGE("Script field %i = %p", ct2, s->mEnviroment.mFieldAddress[ct2]);
- //}
s->mEnviroment.mFragment.set(rsc->getDefaultProgramFragment());
s->mEnviroment.mVertex.set(rsc->getDefaultProgramVertex());
@@ -491,13 +505,6 @@ void rsi_ScriptCBegin(Context * rsc)
ss->clear();
}
-void rsi_ScriptCSetScript(Context * rsc, void *vp)
-{
- rsAssert(0);
- //ScriptCState *ss = &rsc->mScriptC;
- //ss->mProgram.mScript = reinterpret_cast<ScriptC::RunScript_t>(vp);
-}
-
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
{
ScriptCState *ss = &rsc->mScriptC;
diff --git a/media/java/android/media/MtpClient.java b/media/java/android/media/MtpClient.java
index f7c0ce2..98da1f6 100644
--- a/media/java/android/media/MtpClient.java
+++ b/media/java/android/media/MtpClient.java
@@ -57,20 +57,20 @@ public class MtpClient {
native_stop();
}
- public boolean deleteObject(int deviceID, int objectID) {
+ public boolean deleteObject(int deviceID, long objectID) {
return native_delete_object(deviceID, objectID);
}
- public int getParent(int deviceID, int objectID) {
+ public long getParent(int deviceID, long objectID) {
return native_get_parent(deviceID, objectID);
}
- public int getStorageID(int deviceID, int objectID) {
+ public long getStorageID(int deviceID, long objectID) {
return native_get_storage_id(deviceID, objectID);
}
// create a file descriptor for reading the contents of an object over MTP
- public ParcelFileDescriptor openFile(int deviceID, int objectID) {
+ public ParcelFileDescriptor openFile(int deviceID, long objectID) {
return native_open_file(deviceID, objectID);
}
@@ -101,8 +101,8 @@ public class MtpClient {
private native final void native_finalize();
private native boolean native_start();
private native void native_stop();
- private native boolean native_delete_object(int deviceID, int objectID);
- private native int native_get_parent(int deviceID, int objectID);
- private native int native_get_storage_id(int deviceID, int objectID);
- private native ParcelFileDescriptor native_open_file(int deviceID, int objectID);
+ private native boolean native_delete_object(int deviceID, long objectID);
+ private native long native_get_parent(int deviceID, long objectID);
+ private native long native_get_storage_id(int deviceID, long objectID);
+ private native ParcelFileDescriptor native_open_file(int deviceID, long objectID);
}
diff --git a/media/java/android/media/MtpCursor.java b/media/java/android/media/MtpCursor.java
index d4142d8..b9dd03e 100644
--- a/media/java/android/media/MtpCursor.java
+++ b/media/java/android/media/MtpCursor.java
@@ -43,8 +43,8 @@ public final class MtpCursor extends AbstractWindowedCursor {
private int mQueryType;
private int mDeviceID;
- private int mStorageID;
- private int mQbjectID;
+ private long mStorageID;
+ private long mQbjectID;
/** The names of the columns in the projection */
private String[] mColumns;
@@ -54,7 +54,7 @@ public final class MtpCursor extends AbstractWindowedCursor {
private final MtpClient mClient;
- public MtpCursor(MtpClient client, int queryType, int deviceID, int storageID, int objectID,
+ public MtpCursor(MtpClient client, int queryType, int deviceID, long storageID, long objectID,
String[] projection) {
mClient = client;
@@ -220,7 +220,7 @@ public final class MtpCursor extends AbstractWindowedCursor {
private int mNativeContext;
private native final void native_setup(MtpClient client, int queryType,
- int deviceID, int storageID, int objectID, int[] columns);
+ int deviceID, long storageID, long objectID, int[] columns);
private native final void native_finalize();
private native void native_wait_for_event();
private native int native_fill_window(CursorWindow window, int startPos);
diff --git a/media/jni/android_media_MtpClient.cpp b/media/jni/android_media_MtpClient.cpp
index 67740bc..d23185b 100644
--- a/media/jni/android_media_MtpClient.cpp
+++ b/media/jni/android_media_MtpClient.cpp
@@ -161,7 +161,7 @@ android_media_MtpClient_stop(JNIEnv *env, jobject thiz)
static jboolean
android_media_MtpClient_delete_object(JNIEnv *env, jobject thiz,
- jint device_id, jint object_id)
+ jint device_id, jlong object_id)
{
#ifdef HAVE_ANDROID_OS
MyClient *client = (MyClient *)env->GetIntField(thiz, field_context);
@@ -173,9 +173,9 @@ android_media_MtpClient_delete_object(JNIEnv *env, jobject thiz,
return NULL;
}
-static jint
+static jlong
android_media_MtpClient_get_parent(JNIEnv *env, jobject thiz,
- jint device_id, jint object_id)
+ jint device_id, jlong object_id)
{
#ifdef HAVE_ANDROID_OS
MyClient *client = (MyClient *)env->GetIntField(thiz, field_context);
@@ -187,9 +187,9 @@ android_media_MtpClient_get_parent(JNIEnv *env, jobject thiz,
return -1;
}
-static jint
+static jlong
android_media_MtpClient_get_storage_id(JNIEnv *env, jobject thiz,
- jint device_id, jint object_id)
+ jint device_id, jlong object_id)
{
#ifdef HAVE_ANDROID_OS
MyClient *client = (MyClient *)env->GetIntField(thiz, field_context);
@@ -203,7 +203,7 @@ android_media_MtpClient_get_storage_id(JNIEnv *env, jobject thiz,
static jobject
android_media_MtpClient_open_file(JNIEnv *env, jobject thiz,
- jint device_id, jint object_id)
+ jint device_id, jlong object_id)
{
#ifdef HAVE_ANDROID_OS
MyClient *client = (MyClient *)env->GetIntField(thiz, field_context);
@@ -240,10 +240,10 @@ static JNINativeMethod gMethods[] = {
{"native_finalize", "()V", (void *)android_media_MtpClient_finalize},
{"native_start", "()Z", (void *)android_media_MtpClient_start},
{"native_stop", "()V", (void *)android_media_MtpClient_stop},
- {"native_delete_object", "(II)Z", (void *)android_media_MtpClient_delete_object},
- {"native_get_parent", "(II)I", (void *)android_media_MtpClient_get_parent},
- {"native_get_storage_id", "(II)I", (void *)android_media_MtpClient_get_storage_id},
- {"native_open_file", "(II)Landroid/os/ParcelFileDescriptor;",
+ {"native_delete_object", "(IJ)Z", (void *)android_media_MtpClient_delete_object},
+ {"native_get_parent", "(IJ)J", (void *)android_media_MtpClient_get_parent},
+ {"native_get_storage_id", "(IJ)J", (void *)android_media_MtpClient_get_storage_id},
+ {"native_open_file", "(IJ)Landroid/os/ParcelFileDescriptor;",
(void *)android_media_MtpClient_open_file},
};
diff --git a/media/jni/android_media_MtpCursor.cpp b/media/jni/android_media_MtpCursor.cpp
index 6228b5d..6a65ffd 100644
--- a/media/jni/android_media_MtpCursor.cpp
+++ b/media/jni/android_media_MtpCursor.cpp
@@ -49,7 +49,7 @@ static bool ExceptionCheck(void* env)
static void
android_media_MtpCursor_setup(JNIEnv *env, jobject thiz, jobject javaClient,
- jint queryType, jint deviceID, jint storageID, jint objectID, jintArray javaColumns)
+ jint queryType, jint deviceID, jlong storageID, jlong objectID, jintArray javaColumns)
{
#ifdef HAVE_ANDROID_OS
LOGD("android_media_MtpCursor_setup queryType: %d deviceID: %d storageID: %d objectID: %d\n",
@@ -104,7 +104,7 @@ android_media_MtpCursor_fill_window(JNIEnv *env, jobject thiz, jobject javaWindo
// ----------------------------------------------------------------------------
static JNINativeMethod gMethods[] = {
- {"native_setup", "(Landroid/media/MtpClient;IIII[I)V",
+ {"native_setup", "(Landroid/media/MtpClient;IIJJ[I)V",
(void *)android_media_MtpCursor_setup},
{"native_finalize", "()V", (void *)android_media_MtpCursor_finalize},
{"native_fill_window", "(Landroid/database/CursorWindow;I)I",
diff --git a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
index 7483d60..3c0b736 100644
--- a/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
+++ b/media/libstagefright/codecs/avc/dec/AVCDecoder.cpp
@@ -232,6 +232,53 @@ static void findNALFragment(
}
}
+MediaBuffer *AVCDecoder::drainOutputBuffer() {
+ int32_t index;
+ int32_t Release;
+ AVCFrameIO Output;
+ Output.YCbCr[0] = Output.YCbCr[1] = Output.YCbCr[2] = NULL;
+ AVCDec_Status status = PVAVCDecGetOutput(mHandle, &index, &Release, &Output);
+
+ if (status != AVCDEC_SUCCESS) {
+ LOGV("PVAVCDecGetOutput returned error %d", status);
+ return NULL;
+ }
+
+ CHECK(index >= 0);
+ CHECK(index < (int32_t)mFrames.size());
+
+ MediaBuffer *mbuf = mFrames.editItemAt(index);
+
+ bool skipFrame = false;
+
+ if (mTargetTimeUs >= 0) {
+ int64_t timeUs;
+ CHECK(mbuf->meta_data()->findInt64(kKeyTime, &timeUs));
+ CHECK(timeUs <= mTargetTimeUs);
+
+ if (timeUs < mTargetTimeUs) {
+ // We're still waiting for the frame with the matching
+ // timestamp and we won't return the current one.
+ skipFrame = true;
+
+ LOGV("skipping frame at %lld us", timeUs);
+ } else {
+ LOGV("found target frame at %lld us", timeUs);
+
+ mTargetTimeUs = -1;
+ }
+ }
+
+ if (!skipFrame) {
+ mbuf->set_range(0, mbuf->size());
+ mbuf->add_ref();
+
+ return mbuf;
+ }
+
+ return new MediaBuffer(0);
+}
+
status_t AVCDecoder::read(
MediaBuffer **out, const ReadOptions *options) {
*out = NULL;
@@ -279,7 +326,8 @@ status_t AVCDecoder::read(
seekOptions.clearSeekTo();
if (err != OK) {
- return err;
+ *out = drainOutputBuffer();
+ return (*out == NULL) ? err : (status_t)OK;
}
if (mInputBuffer->range_length() > 0) {
@@ -415,51 +463,12 @@ status_t AVCDecoder::read(
fragSize);
if (res == AVCDEC_PICTURE_OUTPUT_READY) {
- int32_t index;
- int32_t Release;
- AVCFrameIO Output;
- Output.YCbCr[0] = Output.YCbCr[1] = Output.YCbCr[2] = NULL;
-
- AVCDec_Status status =
- PVAVCDecGetOutput(mHandle, &index, &Release, &Output);
-
- if (status != AVCDEC_SUCCESS) {
- LOGV("PVAVCDecGetOutput returned error %d", status);
+ MediaBuffer *mbuf = drainOutputBuffer();
+ if (mbuf == NULL) {
break;
}
- CHECK(index >= 0);
- CHECK(index < (int32_t)mFrames.size());
-
- MediaBuffer *mbuf = mFrames.editItemAt(index);
-
- bool skipFrame = false;
-
- if (mTargetTimeUs >= 0) {
- int64_t timeUs;
- CHECK(mbuf->meta_data()->findInt64(kKeyTime, &timeUs));
- CHECK(timeUs <= mTargetTimeUs);
-
- if (timeUs < mTargetTimeUs) {
- // We're still waiting for the frame with the matching
- // timestamp and we won't return the current one.
- skipFrame = true;
-
- LOGV("skipping frame at %lld us", timeUs);
- } else {
- LOGV("found target frame at %lld us", timeUs);
-
- mTargetTimeUs = -1;
- }
- }
-
- if (!skipFrame) {
- *out = mbuf;
- (*out)->set_range(0, (*out)->size());
- (*out)->add_ref();
- } else {
- *out = new MediaBuffer(0);
- }
+ *out = mbuf;
// Do _not_ release input buffer yet.
@@ -496,6 +505,7 @@ status_t AVCDecoder::read(
case AVC_NALTYPE_AUD:
case AVC_NALTYPE_FILL:
+ case AVC_NALTYPE_EOSEQ:
{
*out = new MediaBuffer(0);
diff --git a/media/libstagefright/include/AVCDecoder.h b/media/libstagefright/include/AVCDecoder.h
index 898c90a..eb3b142 100644
--- a/media/libstagefright/include/AVCDecoder.h
+++ b/media/libstagefright/include/AVCDecoder.h
@@ -82,6 +82,8 @@ private:
void releaseFrames();
+ MediaBuffer *drainOutputBuffer();
+
AVCDecoder(const AVCDecoder &);
AVCDecoder &operator=(const AVCDecoder &);
};
diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp
index fcf506d..4f28855 100644
--- a/media/libstagefright/omx/tests/OMXHarness.cpp
+++ b/media/libstagefright/omx/tests/OMXHarness.cpp
@@ -286,7 +286,7 @@ status_t Harness::testStateTransitions(
return OK;
}
- sp<MemoryDealer> dealer = new MemoryDealer(8 * 1024 * 1024, "OMXHarness");
+ sp<MemoryDealer> dealer = new MemoryDealer(16 * 1024 * 1024, "OMXHarness");
IOMX::node_id node;
status_t err =
diff --git a/media/tests/CameraBrowser/Android.mk b/media/tests/CameraBrowser/Android.mk
index 33d2976..1d81129 100644
--- a/media/tests/CameraBrowser/Android.mk
+++ b/media/tests/CameraBrowser/Android.mk
@@ -1,6 +1,8 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
+LOCAL_MODULE_TAGS := tests
+
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := CameraBrowser
diff --git a/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectBrowser.java b/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectBrowser.java
index 329aa40..6d34fd4 100644
--- a/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectBrowser.java
+++ b/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectBrowser.java
@@ -44,8 +44,8 @@ public class ObjectBrowser extends ListActivity {
private Cursor mCursor;
private ObjectCursorAdapter mAdapter;
private int mDeviceID;
- private int mStorageID;
- private int mObjectID;
+ private long mStorageID;
+ private long mObjectID;
private static final String[] OBJECT_COLUMNS =
new String[] { Mtp.Object._ID, Mtp.Object.NAME, Mtp.Object.FORMAT, Mtp.Object.THUMB };
@@ -65,8 +65,8 @@ public class ObjectBrowser extends ListActivity {
super.onResume();
mDeviceID = getIntent().getIntExtra("device", 0);
- mStorageID = getIntent().getIntExtra("storage", 0);
- mObjectID = getIntent().getIntExtra("object", 0);
+ mStorageID = getIntent().getLongExtra("storage", 0);
+ mObjectID = getIntent().getLongExtra("object", 0);
if (mDeviceID != 0 && mStorageID != 0) {
Cursor c;
Uri uri;
@@ -88,7 +88,7 @@ public class ObjectBrowser extends ListActivity {
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
- int rowID = (int)mAdapter.getItemId(position);
+ long rowID = mAdapter.getItemId(position);
Cursor c = getContentResolver().query(
Mtp.Object.getContentUri(mDeviceID, rowID),
OBJECT_COLUMNS, null, null, null);
@@ -111,7 +111,7 @@ public class ObjectBrowser extends ListActivity {
Intent intent = new Intent(this, ObjectViewer.class);
intent.putExtra("device", mDeviceID);
intent.putExtra("storage", mStorageID);
- intent.putExtra("object",rowID);
+ intent.putExtra("object", rowID);
startActivity(intent);
}
}
diff --git a/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectViewer.java b/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectViewer.java
index 408f15e..5899bc1 100644
--- a/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectViewer.java
+++ b/media/tests/CameraBrowser/src/com/android/camerabrowser/ObjectViewer.java
@@ -51,8 +51,8 @@ public class ObjectViewer extends Activity {
private static final String TAG = "ObjectViewer";
private int mDeviceID;
- private int mStorageID;
- private int mObjectID;
+ private long mStorageID;
+ private long mObjectID;
private static final String[] OBJECT_COLUMNS =
new String[] { Mtp.Object._ID,
@@ -84,8 +84,8 @@ public class ObjectViewer extends Activity {
super.onResume();
mDeviceID = getIntent().getIntExtra("device", 0);
- mStorageID = getIntent().getIntExtra("storage", 0);
- mObjectID = getIntent().getIntExtra("object", 0);
+ mStorageID = getIntent().getLongExtra("storage", 0);
+ mObjectID = getIntent().getLongExtra("object", 0);
if (mDeviceID != 0 && mObjectID != 0) {
Cursor c = getContentResolver().query(
diff --git a/media/tests/CameraBrowser/src/com/android/camerabrowser/StorageBrowser.java b/media/tests/CameraBrowser/src/com/android/camerabrowser/StorageBrowser.java
index 6ddf4e7..63e036e 100644
--- a/media/tests/CameraBrowser/src/com/android/camerabrowser/StorageBrowser.java
+++ b/media/tests/CameraBrowser/src/com/android/camerabrowser/StorageBrowser.java
@@ -70,7 +70,7 @@ public class StorageBrowser extends ListActivity {
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent intent = new Intent(this, ObjectBrowser.class);
intent.putExtra("device", mDeviceID);
- intent.putExtra("storage", (int)mAdapter.getItemId(position));
+ intent.putExtra("storage", mAdapter.getItemId(position));
startActivity(intent);
}
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java
index db0db70..d5538f1 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java
@@ -414,13 +414,13 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
EnergyProbe probe = null;
AudioEffect vc = null;
MediaPlayer mp = null;
+ AudioEffect rvb = null;
AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
am.setStreamVolume(AudioManager.STREAM_MUSIC,
am.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
0);
try {
- probe = new EnergyProbe(0);
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
@@ -433,11 +433,24 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
mp = new MediaPlayer();
mp.setDataSource(MediaNames.SINE_200_1000);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
- getReverb(mp.getAudioSessionId());
- mReverb.setRoomLevel((short)0);
- mReverb.setReverbLevel((short)0);
- mReverb.setDecayTime(2000);
- mReverb.setEnabled(true);
+
+ // create reverb with UUID instead of EnvironmentalReverb constructor otherwise an
+ // auxiliary reverb will be chosen by the effect framework as we are on session 0
+ rvb = new AudioEffect(
+ AudioEffect.EFFECT_TYPE_NULL,
+ UUID.fromString("c7a511a0-a3bb-11df-860e-0002a5d5c51b"),
+ 0,
+ 0);
+
+ rvb.setParameter(EnvironmentalReverb.PARAM_ROOM_LEVEL, (short)0);
+ rvb.setParameter(EnvironmentalReverb.PARAM_REVERB_LEVEL, (short)0);
+ rvb.setParameter(EnvironmentalReverb.PARAM_DECAY_TIME, 2000);
+ rvb.setEnabled(true);
+
+ // create probe after reverb so that it is chained behind the reverb in the
+ // effect chain
+ probe = new EnergyProbe(0);
+
mp.prepare();
mp.start();
Thread.sleep(1000);
@@ -460,13 +473,15 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
loge(msg, "sleep() interrupted");
}
finally {
- releaseReverb();
if (mp != null) {
mp.release();
}
if (vc != null) {
vc.release();
}
+ if (rvb != null) {
+ rvb.release();
+ }
if (probe != null) {
probe.release();
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java
index c14319a..fbd8a78 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java
@@ -257,13 +257,13 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
EnergyProbe probe = null;
AudioEffect vc = null;
MediaPlayer mp = null;
+ AudioEffect rvb = null;
AudioManager am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
int volume = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
am.setStreamVolume(AudioManager.STREAM_MUSIC,
am.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
0);
try {
- probe = new EnergyProbe(0);
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
@@ -279,6 +279,22 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
getReverb(mp.getAudioSessionId());
mReverb.setPreset((short)PresetReverb.PRESET_PLATE);
mReverb.setEnabled(true);
+
+ // create reverb with UUID instead of PresetReverb constructor otherwise an auxiliary
+ // reverb will be chosen by the effect framework as we are on session 0
+ rvb = new AudioEffect(
+ AudioEffect.EFFECT_TYPE_NULL,
+ UUID.fromString("172cdf00-a3bc-11df-a72f-0002a5d5c51b"),
+ 0,
+ 0);
+
+ rvb.setParameter(PresetReverb.PARAM_PRESET, PresetReverb.PRESET_PLATE);
+ rvb.setEnabled(true);
+
+ // create probe after reverb so that it is chained behind the reverb in the
+ // effect chain
+ probe = new EnergyProbe(0);
+
mp.prepare();
mp.start();
Thread.sleep(1000);
@@ -308,6 +324,9 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
if (vc != null) {
vc.release();
}
+ if (rvb != null) {
+ rvb.release();
+ }
if (probe != null) {
probe.release();
}
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index 66f9e2d..a8200be 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -1365,16 +1365,18 @@ EGLBoolean eglWaitNative(EGLint engine)
EGLint eglGetError(void)
{
EGLint result = EGL_SUCCESS;
+ EGLint err;
for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- EGLint err = EGL_SUCCESS;
+ err = EGL_SUCCESS;
egl_connection_t* const cnx = &gEGLImpl[i];
if (cnx->dso)
err = cnx->egl.eglGetError();
if (err!=EGL_SUCCESS && result==EGL_SUCCESS)
result = err;
}
+ err = getError();
if (result == EGL_SUCCESS)
- result = getError();
+ result = err;
return result;
}
@@ -1816,16 +1818,16 @@ EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_l
{
EGLContext ctx = eglGetCurrentContext();
ContextRef _c(ctx);
- if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
+ if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_NO_SYNC_KHR);
if (!validate_display_context(dpy, ctx))
- return EGL_NO_IMAGE_KHR;
+ return EGL_NO_SYNC_KHR;
egl_display_t const * const dp = get_display(dpy);
egl_context_t * const c = get_context(ctx);
- EGLSyncKHR result = EGL_NO_IMAGE_KHR;
+ EGLSyncKHR result = EGL_NO_SYNC_KHR;
if (c->cnx->egl.eglCreateSyncKHR) {
EGLSyncKHR sync = c->cnx->egl.eglCreateSyncKHR(
dp->disp[c->impl].dpy, type, attrib_list);
- if (sync == EGL_NO_IMAGE_KHR)
+ if (sync == EGL_NO_SYNC_KHR)
return sync;
result = (egl_sync_t*)new egl_sync_t(dpy, ctx, sync);
}
diff --git a/opengl/tests/testLatency/Android.mk b/opengl/tests/testLatency/Android.mk
new file mode 100644
index 0000000..96417c7
--- /dev/null
+++ b/opengl/tests/testLatency/Android.mk
@@ -0,0 +1,20 @@
+#########################################################################
+# Test end-to-end latency.
+#########################################################################
+
+TOP_LOCAL_PATH:= $(call my-dir)
+
+# Build activity
+
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SDK_VERSION := 8
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := TestLatency
+
+include $(BUILD_PACKAGE)
diff --git a/opengl/tests/testLatency/AndroidManifest.xml b/opengl/tests/testLatency/AndroidManifest.xml
new file mode 100644
index 0000000..741266e
--- /dev/null
+++ b/opengl/tests/testLatency/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.testlatency">
+ <uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8" />
+
+ <application
+ android:label="@string/testLatency_activity">
+ <activity android:name="TestLatencyActivity"
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:launchMode="singleTask"
+ android:configChanges="orientation|keyboardHidden">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/opengl/tests/testLatency/res/values/strings.xml b/opengl/tests/testLatency/res/values/strings.xml
new file mode 100644
index 0000000..0309991
--- /dev/null
+++ b/opengl/tests/testLatency/res/values/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- This file contains resource definitions for displayed strings, allowing
+ them to be changed based on the locale and options. -->
+
+<resources>
+ <!-- Simple strings. -->
+ <string name="testLatency_activity">TestLatency</string>
+
+</resources>
+
diff --git a/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyActivity.java b/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyActivity.java
new file mode 100644
index 0000000..ed993cb
--- /dev/null
+++ b/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyActivity.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.testlatency;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.WindowManager;
+
+import java.io.File;
+
+
+public class TestLatencyActivity extends Activity {
+
+ TestLatencyView mView;
+
+ @Override protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mView = new TestLatencyView(getApplication());
+ setContentView(mView);
+ mView.setFocusableInTouchMode(true);
+ }
+
+ @Override protected void onPause() {
+ super.onPause();
+ mView.onPause();
+ }
+
+ @Override protected void onResume() {
+ super.onResume();
+ mView.onResume();
+ }
+}
diff --git a/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyView.java b/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyView.java
new file mode 100644
index 0000000..d62bf17
--- /dev/null
+++ b/opengl/tests/testLatency/src/com/android/testlatency/TestLatencyView.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.testlatency;
+
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLContext;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.opengl.GLES20;
+
+/**
+ * An implementation of SurfaceView that uses the dedicated surface for
+ * displaying an OpenGL animation. This allows the animation to run in a
+ * separate thread, without requiring that it be driven by the update mechanism
+ * of the view hierarchy.
+ *
+ * The application-specific rendering code is delegated to a GLView.Renderer
+ * instance.
+ */
+class TestLatencyView extends GLSurfaceView {
+ private static String TAG = "TestLatencyiew";
+ private float mX;
+ private float mY;
+ private float mDX;
+ private float mDY;
+ private long mT;
+ private long mDT;
+
+ public TestLatencyView(Context context) {
+ super(context);
+ setEGLContextClientVersion(2);
+ setRenderer(new Renderer());
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_MOVE:
+ float x = event.getX();
+ float y = event.getY();
+ long t = event.getEventTime();
+ synchronized(this) {
+ mDT = t - mT;
+ mT = t;
+ mDX = x - mX;
+ mX = x;
+ mDY = y - mY;
+ mY = y;
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ private class Renderer implements GLSurfaceView.Renderer {
+ private float mScaleX, mScaleY, mOffsetX, mOffsetY;
+ private final float MS_PER_FRAME = 1000 / 60;
+ public Renderer() {
+ mTriangleVertices = ByteBuffer.allocateDirect(mTriangleVerticesData.length * 4)
+ .order(ByteOrder.nativeOrder()).asFloatBuffer();
+ }
+
+
+ public void onDrawFrame(GL10 gl) {
+ GLES20.glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
+ GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
+ GLES20.glUseProgram(mProgram);
+ checkGlError("glUseProgram");
+
+ float x, y, dx, dy;
+ long t, dt;
+ synchronized(TestLatencyView.this) {
+ x = mX;
+ y = mY;
+ dx = mDX;
+ dy = mDY;
+ dt = mDT;
+ }
+
+ if (dt > 0) {
+ dx = dx * MS_PER_FRAME / dt;
+ dy = dy * MS_PER_FRAME / dt;
+ }
+
+ GLES20.glEnableVertexAttribArray(mvPositionHandle);
+ checkGlError("glEnableVertexAttribArray");
+ GLES20.glEnableVertexAttribArray(mvColorHandle);
+ checkGlError("glEnableVertexAttribArray");
+ for(int step = 0; step < 8; step++) {
+ float sx = (x + dx * step) * mScaleX + mOffsetX;
+ float sy = (y + dy * step) * mScaleY + mOffsetY;
+ int cbase = step * 4;
+
+ for (int i = 0; i < mTriangleVerticesData.length; i += 6) {
+ mTriangleVerticesData2[i] = sx + mTriangleVerticesData[i];
+ mTriangleVerticesData2[i+1] = -sy + mTriangleVerticesData[i+1];
+ mTriangleVerticesData2[i+2] = mColors[cbase];
+ mTriangleVerticesData2[i+3] = mColors[cbase+1];
+ mTriangleVerticesData2[i+4] = mColors[cbase+2];
+ mTriangleVerticesData2[i+5] = mColors[cbase+3];
+ }
+ mTriangleVertices.position(0);
+ mTriangleVertices.put(mTriangleVerticesData2).position(0);
+
+ GLES20.glVertexAttribPointer(mvPositionHandle, 2, GLES20.GL_FLOAT, false, 6*4, mTriangleVertices);
+ checkGlError("glVertexAttribPointer mvPosition");
+ mTriangleVertices.put(mTriangleVerticesData2).position(2);
+ GLES20.glVertexAttribPointer(mvColorHandle, 4, GLES20.GL_FLOAT, false, 6*4, mTriangleVertices);
+ checkGlError("glVertexAttribPointer mvColor");
+ GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
+ checkGlError("glDrawArrays");
+ }
+ }
+
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+ GLES20.glViewport(0, 0, width, height);
+ mScaleX = 2.0f / width;
+ mScaleY = 2.0f / height;
+ mOffsetX = -1f;
+ mOffsetY = -1f;
+ }
+
+ public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+ mProgram = createProgram(mVertexShader, mFragmentShader);
+ if (mProgram == 0) {
+ return;
+ }
+ mvPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
+ checkGlError("glGetAttribLocation");
+ if (mvPositionHandle == -1) {
+ throw new RuntimeException("Could not get attrib location for vPosition");
+ }
+ mvColorHandle = GLES20.glGetAttribLocation(mProgram, "aColor");
+ checkGlError("glGetAttribLocation");
+ if (mvColorHandle == -1) {
+ throw new RuntimeException("Could not get attrib location for vColor");
+ }
+ }
+
+ private int loadShader(int shaderType, String source) {
+ int shader = GLES20.glCreateShader(shaderType);
+ if (shader != 0) {
+ GLES20.glShaderSource(shader, source);
+ GLES20.glCompileShader(shader);
+ int[] compiled = new int[1];
+ GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
+ if (compiled[0] == 0) {
+ Log.e(TAG, "Could not compile shader " + shaderType + ":");
+ Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
+ GLES20.glDeleteShader(shader);
+ shader = 0;
+ }
+ }
+ return shader;
+ }
+
+ private int createProgram(String vertexSource, String fragmentSource) {
+ int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
+ if (vertexShader == 0) {
+ return 0;
+ }
+
+ int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);
+ if (pixelShader == 0) {
+ return 0;
+ }
+
+ int program = GLES20.glCreateProgram();
+ if (program != 0) {
+ GLES20.glAttachShader(program, vertexShader);
+ checkGlError("glAttachShader vertexShader");
+ GLES20.glAttachShader(program, pixelShader);
+ checkGlError("glAttachShader pixelShader");
+ GLES20.glLinkProgram(program);
+ int[] linkStatus = new int[1];
+ GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
+ if (linkStatus[0] != GLES20.GL_TRUE) {
+ Log.e(TAG, "Could not link program: ");
+ Log.e(TAG, GLES20.glGetProgramInfoLog(program));
+ GLES20.glDeleteProgram(program);
+ program = 0;
+ }
+ }
+ return program;
+ }
+
+ private void checkGlError(String op) {
+ int error;
+ while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
+ Log.e(TAG, op + ": glError " + error);
+ throw new RuntimeException(op + ": glError " + error);
+ }
+ }
+
+ // X, Y, R G B A
+ private final float[] mTriangleVerticesData = {
+ -0.025f, 0.3f, 0.0f, 1.0f, 0.0f, 1.0f,
+ 0.0f , 0.0f, 0.0f, 1.0f, 0.0f, 1.0f,
+ 0.025f, 0.3f, 1.0f, 1.0f, 255.0f, 1.0f
+ };
+
+ // Color cascade:
+ private final float[] mColors = {
+ 0.0f, 0.0f, 0.0f, 1.0f,
+ 0.5f, 0.0f, 0.0f, 1.0f,
+ 0.0f, 0.5f, 0.0f, 1.0f,
+ 0.5f, 0.5f, 0.0f, 1.0f,
+
+ 0.0f, 0.0f, 0.5f, 1.0f,
+ 1.0f, 0.0f, 0.0f, 1.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f,
+ 0.0f, 1.0f, 0.0f, 1.0f
+ };
+
+ private float[] mTriangleVerticesData2 = new float[mTriangleVerticesData.length];
+ private FloatBuffer mTriangleVertices;
+
+ private final String mVertexShader = "attribute vec4 aPosition;\n"
+ + "attribute vec4 aColor;\n"
+ + "varying vec4 vColor;\n"
+ + "void main() {\n"
+ + " gl_Position = aPosition;\n"
+ + " vColor = aColor;\n"
+ + "}\n";
+
+ private final String mFragmentShader = "precision mediump float;\n"
+ + "varying vec4 vColor;\n"
+ + "void main() {\n"
+ + " gl_FragColor = vColor;\n"
+ + "}\n";
+
+ private int mProgram;
+ private int mvPositionHandle;
+ private int mvColorHandle;
+
+ }
+}
+
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 43bb26a..3980189 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -3,16 +3,16 @@
/**
* Copyright (c) 2009, The Android Open Source Project
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
@@ -24,6 +24,7 @@
<string name="def_airplane_mode_radios" translatable="false">cell,bluetooth,wifi</string>
<string name="airplane_mode_toggleable_radios" translatable="false">bluetooth,wifi</string>
<bool name="def_auto_time">true</bool>
+ <bool name="def_auto_time_zone">true</bool>
<bool name="def_accelerometer_rotation">true</bool>
<!-- Default screen brightness, from 0 to 255. 102 is 40%. -->
<integer name="def_screen_brightness">102</integer>
@@ -31,12 +32,12 @@
<fraction name="def_window_animation_scale">100%</fraction>
<fraction name="def_window_transition_scale">100%</fraction>
<bool name="def_haptic_feedback">true</bool>
-
+
<bool name="def_bluetooth_on">false</bool>
<bool name="def_install_non_market_apps">false</bool>
- <!-- Comma-separated list of location providers.
+ <!-- Comma-separated list of location providers.
Network location is off by default because it requires
- user opt-in via Setup Wizard or Settings.
+ user opt-in via Setup Wizard or Settings.
-->
<string name="def_location_providers_allowed" translatable="false">gps</string>
<bool name="assisted_gps_enabled">true</bool>
@@ -45,11 +46,11 @@
<bool name="def_usb_mass_storage_enabled">true</bool>
<bool name="def_wifi_on">false</bool>
<bool name="def_networks_available_notification_on">true</bool>
-
+
<bool name="def_backup_enabled">false</bool>
<string name="def_backup_transport" translatable="false">android/com.android.internal.backup.LocalTransport</string>
- <!-- Default value for whether or not to pulse the notification LED when there is a
+ <!-- Default value for whether or not to pulse the notification LED when there is a
pending notification -->
<bool name="def_notification_pulse">true</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 8eb3fe6..9ac832b 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -16,6 +16,15 @@
package com.android.providers.settings;
+import com.android.internal.content.PackageHelper;
+import com.android.internal.telephony.RILConstants;
+import com.android.internal.util.XmlUtils;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockPatternView;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
@@ -36,14 +45,6 @@ import android.provider.Settings.Secure;
import android.text.TextUtils;
import android.util.Log;
-import com.android.internal.content.PackageHelper;
-import com.android.internal.telephony.RILConstants;
-import com.android.internal.util.XmlUtils;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.LockPatternView;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
@@ -60,7 +61,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 58;
+ private static final int DATABASE_VERSION = 59;
private Context mContext;
@@ -757,6 +758,23 @@ public class DatabaseHelper extends SQLiteOpenHelper {
upgradeVersion = 58;
}
+ if (upgradeVersion == 58) {
+ /* Add default for new Auto Time Zone */
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ stmt = db.compileStatement("INSERT INTO secure(name,value)"
+ + " VALUES(?,?);");
+ loadBooleanSetting(stmt, Settings.System.AUTO_TIME_ZONE,
+ R.bool.def_auto_time_zone); // Sync timezone to NITZ
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
+ upgradeVersion = 59;
+ }
+
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
@@ -1067,7 +1085,10 @@ public class DatabaseHelper extends SQLiteOpenHelper {
loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
R.bool.def_auto_time); // Sync time to NITZ
-
+
+ loadBooleanSetting(stmt, Settings.System.AUTO_TIME_ZONE,
+ R.bool.def_auto_time_zone); // Sync timezone to NITZ
+
loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
R.integer.def_screen_brightness);
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 3bf6ee4..39ce0b6 100755
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -1171,7 +1171,10 @@ public class GpsLocationProvider implements LocationProviderInterface {
private void reportAGpsStatus(int type, int status) {
switch (status) {
case GPS_REQUEST_AGPS_DATA_CONN:
- int result = mConnMgr.startUsingNetworkFeature(
+ // Set mAGpsDataConnectionState before calling startUsingNetworkFeature
+ // to avoid a race condition with handleUpdateNetworkState()
+ mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
+ int result = mConnMgr.startUsingNetworkFeature(
ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
if (result == Phone.APN_ALREADY_ACTIVE) {
if (mAGpsApn != null) {
@@ -1179,11 +1182,13 @@ public class GpsLocationProvider implements LocationProviderInterface {
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
} else {
Log.e(TAG, "mAGpsApn not set when receiving Phone.APN_ALREADY_ACTIVE");
+ mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED;
native_agps_data_conn_failed();
}
} else if (result == Phone.APN_REQUEST_STARTED) {
- mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
+ // Nothing to do here
} else {
+ mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED;
native_agps_data_conn_failed();
}
break;
diff --git a/services/java/com/android/server/sip/SipService.java b/services/java/com/android/server/sip/SipService.java
index a2ebc69..f1dcd5a 100644
--- a/services/java/com/android/server/sip/SipService.java
+++ b/services/java/com/android/server/sip/SipService.java
@@ -172,7 +172,7 @@ public final class SipService extends ISipService.Stub {
SipSessionGroupExt group = mSipGroups.remove(localProfileUri);
if (group != null) {
notifyProfileRemoved(group.getLocalProfile());
- group.closeToNotReceiveCalls();
+ group.close();
if (isWifiOn() && !anyOpened()) releaseWifiLock();
}
}
@@ -449,9 +449,9 @@ public final class SipService extends ISipService.Stub {
}
}
- public void closeToNotReceiveCalls() {
+ public void close() {
mOpened = false;
- mSipGroup.closeToNotReceiveCalls();
+ mSipGroup.close();
mAutoRegistration.stop();
if (DEBUG) Log.d(TAG, " close: " + getUri() + ": "
+ mIncomingCallBroadcastAction);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 5d4dc58..b71cf13 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -16,6 +16,16 @@
package com.android.internal.telephony.cdma;
+import com.android.internal.telephony.CommandException;
+import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.DataConnectionTracker;
+import com.android.internal.telephony.EventLogTags;
+import com.android.internal.telephony.IccCard;
+import com.android.internal.telephony.MccTable;
+import com.android.internal.telephony.ServiceStateTracker;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.TelephonyProperties;
+
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,19 +48,8 @@ import android.telephony.cdma.CdmaCellLocation;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
-import android.util.Config;
import android.util.TimeUtils;
-import com.android.internal.telephony.CommandException;
-import com.android.internal.telephony.CommandsInterface;
-import com.android.internal.telephony.DataConnectionTracker;
-import com.android.internal.telephony.EventLogTags;
-import com.android.internal.telephony.IccCard;
-import com.android.internal.telephony.MccTable;
-import com.android.internal.telephony.ServiceStateTracker;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.telephony.TelephonyProperties;
-
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
@@ -987,7 +986,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
mNeedFixZone = false;
if (zone != null) {
- if (getAutoTime()) {
+ if (getAutoTimeZone()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
saveNitzTimeZone(zone.getID());
@@ -1439,7 +1438,7 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
}
if (zone != null) {
- if (getAutoTime()) {
+ if (getAutoTimeZone()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
saveNitzTimeZone(zone.getID());
@@ -1529,6 +1528,14 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
}
}
+ private boolean getAutoTimeZone() {
+ try {
+ return Settings.System.getInt(cr, Settings.System.AUTO_TIME_ZONE) > 0;
+ } catch (SettingNotFoundException snfe) {
+ return true;
+ }
+ }
+
private void saveNitzTimeZone(String zoneId) {
mSavedTimeZone = zoneId;
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index b639eea..83ad552 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -16,6 +16,17 @@
package com.android.internal.telephony.gsm;
+import com.android.internal.telephony.CommandException;
+import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.DataConnectionTracker;
+import com.android.internal.telephony.EventLogTags;
+import com.android.internal.telephony.IccCard;
+import com.android.internal.telephony.MccTable;
+import com.android.internal.telephony.RILConstants;
+import com.android.internal.telephony.ServiceStateTracker;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.telephony.TelephonyProperties;
+
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
@@ -47,17 +58,6 @@ import android.util.EventLog;
import android.util.Log;
import android.util.TimeUtils;
-import com.android.internal.telephony.CommandException;
-import com.android.internal.telephony.CommandsInterface;
-import com.android.internal.telephony.DataConnectionTracker;
-import com.android.internal.telephony.EventLogTags;
-import com.android.internal.telephony.IccCard;
-import com.android.internal.telephony.MccTable;
-import com.android.internal.telephony.RILConstants;
-import com.android.internal.telephony.ServiceStateTracker;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.telephony.TelephonyProperties;
-
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
@@ -995,7 +995,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
mNeedFixZone = false;
if (zone != null) {
- if (getAutoTime()) {
+ if (getAutoTimeZone()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
saveNitzTimeZone(zone.getID());
@@ -1476,7 +1476,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
if (zone != null) {
- if (getAutoTime()) {
+ if (getAutoTimeZone()) {
setAndBroadcastNetworkSetTimeZone(zone.getID());
}
saveNitzTimeZone(zone.getID());
@@ -1546,6 +1546,15 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
}
+ private boolean getAutoTimeZone() {
+ try {
+ return Settings.System.getInt(phone.getContext().getContentResolver(),
+ Settings.System.AUTO_TIME_ZONE) > 0;
+ } catch (SettingNotFoundException snfe) {
+ return true;
+ }
+ }
+
private void saveNitzTimeZone(String zoneId) {
mSavedTimeZone = zoneId;
}
diff --git a/tests/DumpRenderTree2/assets/run_apache2.py b/tests/DumpRenderTree2/assets/run_apache2.py
index c799b5c..5edead1 100755
--- a/tests/DumpRenderTree2/assets/run_apache2.py
+++ b/tests/DumpRenderTree2/assets/run_apache2.py
@@ -109,18 +109,17 @@ def main(options, args):
# Try to execute the commands
logging.info("Will " + run_cmd + " apache2 server.")
- cmd_template = export_envvars_cmd + " && " + apache2_restart_template + directives + conf_file_cmd
# It is worth noting here that if the configuration file with which we restart the server points
- # to a different PidFile it will not work and result in second apache2 instance.
+ # to a different PidFile it will not work and will result in a second apache2 instance.
if (run_cmd == 'restart'):
logging.info("First will stop...")
- execute_cmd(cmd_template % ('stop'))
+ execute_cmd(export_envvars_cmd + " && " + (apache2_restart_template % ('stop')) + directives + conf_file_cmd)
logging.info("Stopped. Will start now...")
# We need to sleep breifly to avoid errors with apache being stopped and started too quickly
time.sleep(0.5)
- execute_cmd(cmd_template % (run_cmd))
+ execute_cmd(export_envvars_cmd + " && " + (apache2_restart_template % (run_cmd)) + directives + conf_file_cmd)
def execute_cmd(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/AbstractResult.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/AbstractResult.java
index 96c1e5e..614b03c 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/AbstractResult.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/AbstractResult.java
@@ -32,7 +32,7 @@ import java.io.Serializable;
* A class that represent a result of the test. It is responsible for returning the result's
* raw data and generating its own diff in HTML format.
*/
-public abstract class AbstractResult implements Comparable<AbstractResult> {
+public abstract class AbstractResult implements Comparable<AbstractResult>, Serializable {
private static final String LOG_TAG = "AbstractResult";
diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
index b9fc274..c0ba9e5 100644
--- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
+++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.net.Uri;
+import android.net.http.SslError;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
@@ -30,19 +31,20 @@ import android.os.Message;
import android.os.Messenger;
import android.os.PowerManager;
import android.os.Process;
-import android.os.RemoteException;
import android.os.PowerManager.WakeLock;
+import android.os.RemoteException;
import android.util.Log;
import android.view.Window;
import android.webkit.ConsoleMessage;
+import android.webkit.GeolocationPermissions;
import android.webkit.HttpAuthHandler;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
+import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import android.webkit.GeolocationPermissions;
import android.webkit.WebStorage.QuotaUpdater;
import java.io.File;
@@ -74,7 +76,7 @@ public class LayoutTestsExecutor extends Activity {
}
}
- private static final String LOG_TAG = "LayoutTestExecutor";
+ private static final String LOG_TAG = "LayoutTestsExecutor";
public static final String EXTRA_TESTS_LIST = "TestsList";
public static final String EXTRA_TEST_INDEX = "TestIndex";
@@ -180,6 +182,13 @@ public class LayoutTestsExecutor extends Activity {
}
handler.cancel();
}
+
+ @Override
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+ // We ignore SSL errors. In particular, the certificate used by the LayoutTests server
+ // produces an error as it lacks a CN field.
+ handler.proceed();
+ }
};
private WebChromeClient mWebChromeClient = new WebChromeClient() {
@@ -236,7 +245,7 @@ public class LayoutTestsExecutor extends Activity {
* We never display the new window, just create the view and allow it's content to
* execute and be recorded by the executor.
*/
- newWindowWebView = new WebView(LayoutTestsExecutor.this);
+ newWindowWebView = createWebViewWithJavascriptInterfaces();
setupWebView(newWindowWebView);
}
@@ -317,7 +326,7 @@ public class LayoutTestsExecutor extends Activity {
mCurrentResult = null;
mCurrentAdditionalTextOutput = null;
- mCurrentWebView = new WebView(this);
+ mCurrentWebView = createWebViewWithJavascriptInterfaces();
setupWebView(mCurrentWebView);
mEventSender.reset(mCurrentWebView);
@@ -329,11 +338,26 @@ public class LayoutTestsExecutor extends Activity {
}
}
+ private static class WebViewWithJavascriptInterfaces extends WebView {
+ public WebViewWithJavascriptInterfaces(
+ Context context, Map<String, Object> javascriptInterfaces) {
+ super(context,
+ null, // attribute set
+ 0, // default style resource ID
+ javascriptInterfaces,
+ false); // is private browsing
+ }
+ }
+ private WebView createWebViewWithJavascriptInterfaces() {
+ Map<String, Object> javascriptInterfaces = new HashMap<String, Object>();
+ javascriptInterfaces.put("layoutTestController", mLayoutTestController);
+ javascriptInterfaces.put("eventSender", mEventSender);
+ return new WebViewWithJavascriptInterfaces(this, javascriptInterfaces);
+ }
+
private void setupWebView(WebView webView) {
webView.setWebViewClient(mWebViewClient);
webView.setWebChromeClient(mWebChromeClient);
- webView.addJavascriptInterface(mLayoutTestController, "layoutTestController");
- webView.addJavascriptInterface(mEventSender, "eventSender");
/**
* Setting a touch interval of -1 effectively disables the optimisation in WebView