From 510b887042e2a14096f4b7d8eb9bd7eb5bafb013 Mon Sep 17 00:00:00 2001 From: Matthew Simmons Date: Thu, 10 Feb 2011 15:58:01 -0500 Subject: [PATCH] Issue 311: Don't reuse the SQLiteQueryBuilder on Cupcake or Donut due to Android issue 1587 --- .../apps/mytracks/content/MyTracksProvider.java | 8 ++++++-- .../android/apps/mytracks/util/ApiFeatures.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java index fa257eb04..86394daa3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java +++ b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks.content; import com.google.android.apps.mytracks.MyTracksConstants; +import com.google.android.apps.mytracks.util.ApiFeatures; import android.content.ContentProvider; import android.content.ContentUris; @@ -371,8 +372,11 @@ public class MyTracksProvider extends ContentProvider { throw new IllegalArgumentException("Unknown URL " + url); } - Log.i(MyTracksConstants.TAG, - "Build query: " + qb.buildQuery(projection, selection, selectionArgs, null, null, sortOrder, null)); + if (ApiFeatures.getInstance().canUseSQLiteQueryBuilderTwice()) { + Log.i(MyTracksConstants.TAG, + "Build query: " + qb.buildQuery(projection, selection, selectionArgs, + null, null, sortOrder, null)); + } Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder); c.setNotificationUri(getContext().getContentResolver(), url); diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/ApiFeatures.java b/MyTracks/src/com/google/android/apps/mytracks/util/ApiFeatures.java index c6dd60c75..0e6c0e6d9 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/ApiFeatures.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/ApiFeatures.java @@ -106,6 +106,18 @@ public class ApiFeatures { public boolean hasStrictMode() { return getApiLevel() >= 9; } + + /** + * There's a bug (#1587) in Cupcake and Donut which prevents you from + * using a SQLiteQueryBuilder twice. That is, if you call buildQuery + * on a given instance (to log the statement for debugging), and then + * call query on the same instance to make it actually do the query, + * it'll regenerate the query for the second call, and will screw it + * up. Specifically, it'll add extra parens which don't belong. + */ + public boolean canUseSQLiteQueryBuilderTwice() { + return getApiLevel() > 4; + } // Visible for testing. protected int getApiLevel() {