diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-09-06 08:07:37 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-09-06 08:07:37 +0000 |
commit | b0861f613ca96080c71f1c89d37ad9ceec1db916 (patch) | |
tree | 69921b9546c0b0373afd09f9947d50a9e933e4cd | |
parent | 3b9135f4ae03fb923320fdba96774067959a8bd2 (diff) | |
parent | fcb60d0a42489bcacefd4b17220243b078082cdb (diff) | |
download | TvProvider-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.java | 65 |
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) { |