diff --git a/api/current.txt b/api/current.txt index ac367f657d643..d367a00bc3479 100644 --- a/api/current.txt +++ b/api/current.txt @@ -21512,6 +21512,7 @@ package android.test.mock { public class MockContentResolver extends android.content.ContentResolver { ctor public MockContentResolver(); + ctor public MockContentResolver(android.content.Context); method public void addProvider(java.lang.String, android.content.ContentProvider); } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 60d43630063be..127164567e517 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -187,7 +187,8 @@ public final class ActivityThread { = new ArrayList(); // set of instantiated backup agents, keyed by package name final HashMap mBackupAgents = new HashMap(); - static final ThreadLocal sThreadLocal = new ThreadLocal(); + /** Reference to singleton {@link ActivityThread} */ + private static ActivityThread sCurrentActivityThread; Instrumentation mInstrumentation; String mInstrumentationAppDir = null; String mInstrumentationAppLibraryDir = null; @@ -1564,7 +1565,7 @@ public final class ActivityThread { } public static ActivityThread currentActivityThread() { - return sThreadLocal.get(); + return sCurrentActivityThread; } public static String currentPackageName() { @@ -4894,7 +4895,7 @@ public final class ActivityThread { } private void attach(boolean system) { - sThreadLocal.set(this); + sCurrentActivityThread = this; mSystemThread = system; if (!system) { ViewRootImpl.addFirstDrawHandler(new Runnable() { diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 32e40ee2175be..26dc60dc0bcdf 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -1085,6 +1085,7 @@ public class DownloadManager { values.put(Downloads.Impl.COLUMN_TOTAL_BYTES, -1); values.putNull(Downloads.Impl._DATA); values.put(Downloads.Impl.COLUMN_STATUS, Downloads.Impl.STATUS_PENDING); + values.put(Downloads.Impl.COLUMN_FAILED_CONNECTIONS, 0); mResolver.update(mBaseUri, values, getWhereClauseForIds(ids), getWhereArgsForIds(ids)); } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 51c9aa5756732..fb735295ee31c 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -20,6 +20,7 @@ import dalvik.system.CloseGuard; import android.accounts.Account; import android.app.ActivityManagerNative; +import android.app.ActivityThread; import android.app.AppGlobals; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetFileDescriptor; @@ -206,8 +207,8 @@ public abstract class ContentResolver { private final Random mRandom = new Random(); // guarded by itself public ContentResolver(Context context) { - mContext = context; - mPackageName = context.getPackageName(); + mContext = context != null ? context : ActivityThread.currentApplication(); + mPackageName = mContext.getPackageName(); } /** @hide */ diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index 05099fba14d5e..facab4c8e2a71 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -806,7 +806,15 @@ public class Process { */ public static final native void setProcessGroup(int pid, int group) throws IllegalArgumentException, SecurityException; - + + /** + * Return the scheduling group of requested process. + * + * @hide + */ + public static final native int getProcessGroup(int pid) + throws IllegalArgumentException, SecurityException; + /** * Set the priority of the calling thread, based on Linux priorities. See * {@link #setThreadPriority(int, int)} for more information. diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 31ad12ba3ec17..99997605aa326 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -407,6 +407,9 @@ public final class Downloads { */ public static final String COLUMN_LAST_UPDATESRC = "lastUpdateSrc"; + /** The column that is used to count retries */ + public static final String COLUMN_FAILED_CONNECTIONS = "numfailed"; + /** * default value for {@link #COLUMN_LAST_UPDATESRC}. * This value is used when this column's value is not relevant. diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp index 0290857c97617..5d323285662d9 100644 --- a/core/jni/android_util_Process.cpp +++ b/core/jni/android_util_Process.cpp @@ -268,6 +268,15 @@ void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jin closedir(d); } +jint android_os_Process_getProcessGroup(JNIEnv* env, jobject clazz, jint pid) +{ + SchedPolicy sp; + if (get_sched_policy(pid, &sp) != 0) { + signalExceptionForGroupError(env, errno); + } + return (int) sp; +} + static void android_os_Process_setCanSelfBackground(JNIEnv* env, jobject clazz, jboolean bgOk) { // Establishes the calling thread as illegal to put into the background. // Typically used only for the system process's main looper. @@ -991,7 +1000,8 @@ static const JNINativeMethod methods[] = { {"setThreadPriority", "(I)V", (void*)android_os_Process_setCallingThreadPriority}, {"getThreadPriority", "(I)I", (void*)android_os_Process_getThreadPriority}, {"setThreadGroup", "(II)V", (void*)android_os_Process_setThreadGroup}, - {"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup}, + {"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup}, + {"getProcessGroup", "(I)I", (void*)android_os_Process_getProcessGroup}, {"setOomAdj", "(II)Z", (void*)android_os_Process_setOomAdj}, {"setArgV0", "(Ljava/lang/String;)V", (void*)android_os_Process_setArgV0}, {"setUid", "(I)I", (void*)android_os_Process_setUid}, diff --git a/test-runner/src/android/test/mock/MockContentResolver.java b/test-runner/src/android/test/mock/MockContentResolver.java index 715da0f6813d0..aec6c772f3a54 100644 --- a/test-runner/src/android/test/mock/MockContentResolver.java +++ b/test-runner/src/android/test/mock/MockContentResolver.java @@ -54,12 +54,20 @@ import java.util.Map; public class MockContentResolver extends ContentResolver { Map mProviders; - /* - * Creates a local map of providers. This map is used instead of the global map when an - * API call tries to acquire a provider. + /** + * Creates a local map of providers. This map is used instead of the global + * map when an API call tries to acquire a provider. */ public MockContentResolver() { - super(null); + this(null); + } + + /** + * Creates a local map of providers. This map is used instead of the global + * map when an API call tries to acquire a provider. + */ + public MockContentResolver(Context context) { + super(context); mProviders = Maps.newHashMap(); }