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