summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-09-06 08:07:37 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-09-06 08:07:37 +0000
commitb0861f613ca96080c71f1c89d37ad9ceec1db916 (patch)
tree69921b9546c0b0373afd09f9947d50a9e933e4cd
parent3b9135f4ae03fb923320fdba96774067959a8bd2 (diff)
parentfcb60d0a42489bcacefd4b17220243b078082cdb (diff)
downloadTvProvider-b0861f613ca96080c71f1c89d37ad9ceec1db916.tar.gz
release-request-f7e8a600-b041-4cd7-94a0-d043d188195c-for-git_pi-release-4318525 snap-temp-L60300000099762192
Change-Id: Iaeaf5853266b28af73bb084fdab4aeef0febe3c7
-rw-r--r--src/com/android/providers/tv/TvProvider.java65
1 files changed, 33 insertions, 32 deletions
diff --git a/src/com/android/providers/tv/TvProvider.java b/src/com/android/providers/tv/TvProvider.java
index ff2452e..6968196 100644
--- a/src/com/android/providers/tv/TvProvider.java
+++ b/src/com/android/providers/tv/TvProvider.java
@@ -970,38 +970,9 @@ public class TvProvider extends ContentProvider {
@Override
public void onOpen(SQLiteDatabase db) {
- // This method is thread-safe. It's guaranteed by the implementation of SQLiteOpenHelper
- if (!sInitialized) {
- buildProjectionMap(db);
- sBlockedPackagesSharedPreference = PreferenceManager.getDefaultSharedPreferences(
- mContext);
- sBlockedPackages = new ConcurrentHashMap<>();
- for (String packageName : sBlockedPackagesSharedPreference.getStringSet(
- SHARED_PREF_BLOCKED_PACKAGES_KEY, new HashSet<>())) {
- sBlockedPackages.put(packageName, true);
- }
- sInitialized = true;
- }
- }
-
- private void buildProjectionMap(SQLiteDatabase db) {
- updateProjectionMap(db, CHANNELS_TABLE, sChannelProjectionMap);
- updateProjectionMap(db, PROGRAMS_TABLE, sProgramProjectionMap);
- updateProjectionMap(db, WATCHED_PROGRAMS_TABLE, sWatchedProgramProjectionMap);
- updateProjectionMap(db, RECORDED_PROGRAMS_TABLE, sRecordedProgramProjectionMap);
- updateProjectionMap(db, PREVIEW_PROGRAMS_TABLE, sPreviewProgramProjectionMap);
- updateProjectionMap(db, WATCH_NEXT_PROGRAMS_TABLE, sWatchNextProgramProjectionMap);
- }
-
- private void updateProjectionMap(SQLiteDatabase db, String tableName,
- Map<String, String> projectionMap) {
- try(Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0", null)) {
- for (String columnName : cursor.getColumnNames()) {
- if (!projectionMap.containsKey(columnName)) {
- projectionMap.put(columnName, tableName + '.' + columnName);
- }
- }
- }
+ // Call a static method on the TvProvider because changes to sInitialized must
+ // be guarded by a lock on the class.
+ initOnOpenIfNeeded(mContext, db);
}
private static void migrateIntegerColumnToTextColumn(SQLiteDatabase db, String table,
@@ -1596,6 +1567,36 @@ public class TvProvider extends ContentProvider {
}
}
+ private static synchronized void initOnOpenIfNeeded(Context context, SQLiteDatabase db) {
+ if (!sInitialized) {
+ updateProjectionMap(db, CHANNELS_TABLE, sChannelProjectionMap);
+ updateProjectionMap(db, PROGRAMS_TABLE, sProgramProjectionMap);
+ updateProjectionMap(db, WATCHED_PROGRAMS_TABLE, sWatchedProgramProjectionMap);
+ updateProjectionMap(db, RECORDED_PROGRAMS_TABLE, sRecordedProgramProjectionMap);
+ updateProjectionMap(db, PREVIEW_PROGRAMS_TABLE, sPreviewProgramProjectionMap);
+ updateProjectionMap(db, WATCH_NEXT_PROGRAMS_TABLE, sWatchNextProgramProjectionMap);
+ sBlockedPackagesSharedPreference = PreferenceManager.getDefaultSharedPreferences(
+ context);
+ sBlockedPackages = new ConcurrentHashMap<>();
+ for (String packageName : sBlockedPackagesSharedPreference.getStringSet(
+ SHARED_PREF_BLOCKED_PACKAGES_KEY, new HashSet<>())) {
+ sBlockedPackages.put(packageName, true);
+ }
+ sInitialized = true;
+ }
+ }
+
+ private static void updateProjectionMap(SQLiteDatabase db, String tableName,
+ Map<String, String> projectionMap) {
+ try(Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 0", null)) {
+ for (String columnName : cursor.getColumnNames()) {
+ if (!projectionMap.containsKey(columnName)) {
+ projectionMap.put(columnName, tableName + '.' + columnName);
+ }
+ }
+ }
+ }
+
private Map<String, String> createProjectionMapForQuery(String[] projection,
Map<String, String> projectionMap) {
if (projection == null) {