1dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki/* 2dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Copyright (C) 2015 The Android Open Source Project 3dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * 4dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * you may not use this file except in compliance with the License. 6dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * You may obtain a copy of the License at 7dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * 8dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * 10dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Unless required by applicable law or agreed to in writing, software 11dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * See the License for the specific language governing permissions and 14dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * limitations under the License 15dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki */ 16dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onukipackage com.android.providers.contacts.util; 17dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 18dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onukiimport android.content.ContentValues; 19dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onukiimport android.database.Cursor; 20dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onukiimport android.database.sqlite.SQLiteDatabase; 21dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 22dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki/** 23dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Utilities related to "database properties", which are similar to shard preferences, but 24dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * are transaction-aware. 25dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki */ 26dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onukipublic class PropertyUtils { 27dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki private PropertyUtils() { 28dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 29dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 30dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki public interface Tables { 31dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki String PROPERTIES = "properties"; 32dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 33dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 34dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki public interface PropertiesColumns { 35dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki String PROPERTY_KEY = "property_key"; 36dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki String PROPERTY_VALUE = "property_value"; 37dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 38dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 39dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki /** 40dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Creates the properties table. 41dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki */ 42dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki public static void createPropertiesTable(SQLiteDatabase db) { 43dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki db.execSQL("CREATE TABLE " + Tables.PROPERTIES + " (" + 44dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki PropertiesColumns.PROPERTY_KEY + " TEXT PRIMARY KEY, " + 45dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki PropertiesColumns.PROPERTY_VALUE + " TEXT " + 46dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki ");"); 47dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 48dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 49dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 50dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki /** 51dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Gets a property. 52dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki */ 53dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki public static String getProperty(SQLiteDatabase db, String key, String defaultValue) { 54dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki final Cursor cursor = db.query(Tables.PROPERTIES, 55dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki new String[] {PropertiesColumns.PROPERTY_VALUE}, 56dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki PropertiesColumns.PROPERTY_KEY + "=?", 57dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki new String[] {key}, null, null, null); 58dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki String value = null; 59dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki try { 60dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki if (cursor.moveToFirst()) { 61dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki value = cursor.getString(0); 62dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 63dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } finally { 64dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki cursor.close(); 65dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 66dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 67dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki return value != null ? value : defaultValue; 68dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 69dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki 70dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki /** 71dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki * Sets a property. 72dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki */ 73dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki public static void setProperty(SQLiteDatabase db, String key, String value) { 74dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki ContentValues values = new ContentValues(); 75dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki values.put(PropertiesColumns.PROPERTY_KEY, key); 76dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki values.put(PropertiesColumns.PROPERTY_VALUE, value); 77dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki db.replace(Tables.PROPERTIES, null, values); 78dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki } 79dc653a5c1bed274512ce41e4a6129a65d2b0eeacMakoto Onuki} 80