Merge "Remove some hard-coded encoding parameters" into kraken
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index 52aac3a..aefbabc 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -28,6 +28,12 @@
* Transactions are used to make sure the database is always in a sensible state.
* <p>For an example, see the NotePadProvider class in the NotePad sample application,
* in the <em>samples/</em> directory of the SDK.</p>
+ *
+ * <p class="note"><strong>Note:</strong> this class assumes
+ * monotonically increasing version numbers for upgrades. Also, there
+ * is no concept of a database downgrade; installing a new version of
+ * your app which uses a lower version number than a
+ * previously-installed version will result in undefined behavior.</p>
*/
public abstract class SQLiteOpenHelper {
private static final String TAG = SQLiteOpenHelper.class.getSimpleName();
@@ -105,6 +111,10 @@
if (version == 0) {
onCreate(db);
} else {
+ if (version > mNewVersion) {
+ Log.wtf(TAG, "Can't downgrade read-only database from version " +
+ version + " to " + mNewVersion + ": " + db.getPath());
+ }
onUpgrade(db, version, mNewVersion);
}
db.setVersion(mNewVersion);
diff --git a/core/java/android/util/Log.java b/core/java/android/util/Log.java
index e111669..d577b74 100644
--- a/core/java/android/util/Log.java
+++ b/core/java/android/util/Log.java
@@ -88,6 +88,21 @@
TerribleFailure(String msg, Throwable cause) { super(msg, cause); }
}
+ /**
+ * Interface to handle terrible failures from {@link #wtf()}.
+ *
+ * @hide
+ */
+ public interface TerribleFailureHandler {
+ void onTerribleFailure(String tag, TerribleFailure what);
+ }
+
+ private static TerribleFailureHandler sWtfHandler = new TerribleFailureHandler() {
+ public void onTerribleFailure(String tag, TerribleFailure what) {
+ RuntimeInit.wtf(tag, what);
+ }
+ };
+
private Log() {
}
@@ -257,13 +272,29 @@
* @param tr An exception to log. May be null.
*/
public static int wtf(String tag, String msg, Throwable tr) {
- tr = new TerribleFailure(msg, tr);
+ TerribleFailure what = new TerribleFailure(msg, tr);
int bytes = println_native(LOG_ID_MAIN, ASSERT, tag, getStackTraceString(tr));
- RuntimeInit.wtf(tag, tr);
+ sWtfHandler.onTerribleFailure(tag, what);
return bytes;
}
/**
+ * Sets the terrible failure handler, for testing.
+ *
+ * @return the old handler
+ *
+ * @hide
+ */
+ public static TerribleFailureHandler setWtfHandler(TerribleFailureHandler handler) {
+ if (handler == null) {
+ throw new NullPointerException("handler == null");
+ }
+ TerribleFailureHandler oldHandler = sWtfHandler;
+ sWtfHandler = handler;
+ return oldHandler;
+ }
+
+ /**
* Handy function to get a loggable stack trace from a Throwable
* @param tr An exception to log
*/
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index cc30d71..0f0cf60 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -16,6 +16,7 @@
package android.view;
+import android.util.DisplayMetrics;
import com.android.internal.view.BaseIWindow;
import android.content.Context;
@@ -219,6 +220,46 @@
mRequestedVisible = mWindowVisibility && mViewVisibility;
updateWindow(false);
}
+
+ /**
+ * This method is not intended for general use. It was created
+ * temporarily to improve performance of 3D layers in Launcher
+ * and should be removed and fixed properly.
+ *
+ * Do not call this method. Ever.
+ *
+ * @hide
+ */
+ protected void showSurface() {
+ if (mSession != null) {
+ updateWindow(true);
+ }
+ }
+
+ /**
+ * This method is not intended for general use. It was created
+ * temporarily to improve performance of 3D layers in Launcher
+ * and should be removed and fixed properly.
+ *
+ * Do not call this method. Ever.
+ *
+ * @hide
+ */
+ protected void hideSurface() {
+ if (mSession != null && mWindow != null) {
+ mSurfaceLock.lock();
+ try {
+ DisplayMetrics metrics = getResources().getDisplayMetrics();
+ mLayout.x = metrics.widthPixels * 3;
+ mSession.relayout(mWindow, mLayout, mWidth, mHeight, VISIBLE, false,
+ mWinFrame, mContentInsets, mVisibleInsets, mConfiguration, mSurface);
+ } catch (RemoteException e) {
+ // Ignore
+ } finally {
+ mSurfaceLock.unlock();
+ }
+ }
+ }
@Override
protected void onDetachedFromWindow() {