am 4730dda8: am 46507f4b: Merge "Decouple construction of WebView, CookieSyncManager, WebViewDatabase" into klp-dev

* commit '4730dda880097b1c25096e323be8a527fd6e0b09':
  Decouple construction of WebView, CookieSyncManager, WebViewDatabase
This commit is contained in:
Jonathan Dixon
2013-10-03 15:39:42 -07:00
committed by Android Git Automerger
3 changed files with 32 additions and 24 deletions

View File

@@ -59,8 +59,10 @@ public final class CookieSyncManager extends WebSyncManager {
private static CookieSyncManager sRef;
private CookieSyncManager(Context context) {
super(context, "CookieSyncManager");
private static boolean sGetInstanceAllowed = false;
private CookieSyncManager() {
super("CookieSyncManager");
}
/**
@@ -71,7 +73,10 @@ public final class CookieSyncManager extends WebSyncManager {
* @return CookieSyncManager
*/
public static synchronized CookieSyncManager getInstance() {
checkInstanceIsCreated();
checkInstanceIsAllowed();
if (sRef == null) {
sRef = new CookieSyncManager();
}
return sRef;
}
@@ -80,16 +85,13 @@ public final class CookieSyncManager extends WebSyncManager {
* @param context
* @return CookieSyncManager
*/
public static synchronized CookieSyncManager createInstance(
Context context) {
public static synchronized CookieSyncManager createInstance(Context context) {
if (context == null) {
throw new IllegalArgumentException("Invalid context argument");
}
if (sRef == null) {
sRef = new CookieSyncManager(context);
}
return sRef;
setGetInstanceIsAllowed();
return getInstance();
}
protected void syncFromRamToFlash() {
@@ -110,8 +112,15 @@ public final class CookieSyncManager extends WebSyncManager {
}
}
private static void checkInstanceIsCreated() {
if (sRef == null) {
static void setGetInstanceIsAllowed() {
sGetInstanceAllowed = true;
}
private static void checkInstanceIsAllowed() {
// Prior to Android KK, calling createInstance() or constructing a WebView is
// a hard pre-condition for calling getInstance(). We retain that contract to aid
// developers targeting a range of SDK levels.
if (!sGetInstanceAllowed) {
throw new IllegalStateException(
"CookieSyncManager::createInstance() needs to be called "
+ "before CookieSyncManager::getInstance()");

View File

@@ -36,7 +36,7 @@ abstract class WebSyncManager implements Runnable {
private String mThreadName;
// handler of the sync thread
protected Handler mHandler;
// database for the persistent storage
// database for the persistent storage. Always null.
protected WebViewDatabase mDataBase;
// Ref count for calls to start/stop sync
private int mStartSyncRefCount;
@@ -60,16 +60,15 @@ abstract class WebSyncManager implements Runnable {
}
protected WebSyncManager(Context context, String name) {
this(name);
}
/** @hide */
WebSyncManager(String name) {
mThreadName = name;
if (context != null) {
mDataBase = WebViewDatabase.getInstance(context);
mSyncThread = new Thread(this);
mSyncThread.setName(mThreadName);
mSyncThread.start();
} else {
throw new IllegalStateException(
"WebSyncManager can't be created without context");
}
mSyncThread = new Thread(this);
mSyncThread.setName(mThreadName);
mSyncThread.start();
}
protected Object clone() throws CloneNotSupportedException {
@@ -82,7 +81,7 @@ abstract class WebSyncManager implements Runnable {
mHandler = new SyncHandler();
onSyncInit();
// lower the priority after onSyncInit() is done
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
Message msg = mHandler.obtainMessage(SYNC_MESSAGE);
mHandler.sendMessageDelayed(msg, SYNC_LATER_INTERVAL);

View File

@@ -506,8 +506,8 @@ public class WebView extends AbsoluteLayout
ensureProviderCreated();
mProvider.init(javaScriptInterfaces, privateBrowsing);
// Post condition of creating a webview is the CookieSyncManager instance exists.
CookieSyncManager.createInstance(getContext());
// Post condition of creating a webview is the CookieSyncManager.getInstance() is allowed.
CookieSyncManager.setGetInstanceIsAllowed();
}
/**