/*
* Copyright (C) 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.utils.labeling;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.android.utils.LogUtils;
import java.util.Locale;
/**
* A table for storing custom TalkBack labels.
*/
public class LabelsTable {
public static final String TABLE_NAME = "labels";
public static final String KEY_ID = "_id";
public static final String KEY_PACKAGE_NAME = "packageName";
public static final String KEY_PACKAGE_SIGNATURE = "packageSignature";
public static final String KEY_VIEW_NAME = "viewName";
public static final String KEY_TEXT = "text";
public static final String KEY_LOCALE = "locale";
public static final String KEY_PACKAGE_VERSION = "packageVersion";
public static final String KEY_SCREENSHOT_PATH = "screenshotPath";
public static final String KEY_TIMESTAMP = "timestamp";
public static final String KEY_SOURCE_TYPE = "sourceType";
public static final int INDEX_ID = 0;
public static final int INDEX_PACKAGE_NAME = 1;
public static final int INDEX_PACKAGE_SIGNATURE = 2;
public static final int INDEX_VIEW_NAME = 3;
public static final int INDEX_TEXT = 4;
public static final int INDEX_LOCALE = 5;
public static final int INDEX_PACKAGE_VERSION = 6;
public static final int INDEX_SCREENSHOT_PATH = 7;
public static final int INDEX_TIMESTAMP = 8;
public static final int INDEX_SOURCE_TYPE = 9;
public static final String[] ALL_COLUMNS = new String[] {
KEY_ID, KEY_PACKAGE_NAME, KEY_PACKAGE_SIGNATURE, KEY_VIEW_NAME, KEY_TEXT, KEY_LOCALE,
KEY_PACKAGE_VERSION, KEY_SCREENSHOT_PATH, KEY_TIMESTAMP, KEY_SOURCE_TYPE };
public static void onCreate(SQLiteDatabase database) {
LogUtils.log(LabelsTable.class, Log.INFO, "Creating table: %s.", TABLE_NAME);
new SQLiteTableBuilder(database, TABLE_NAME)
.addColumn(KEY_ID, SQLiteTableBuilder.TYPE_INTEGER, true)
.addColumn(KEY_PACKAGE_NAME, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_PACKAGE_SIGNATURE, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_VIEW_NAME, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_TEXT, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_LOCALE, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_PACKAGE_VERSION, SQLiteTableBuilder.TYPE_INTEGER)
.addColumn(KEY_SCREENSHOT_PATH, SQLiteTableBuilder.TYPE_TEXT)
.addColumn(KEY_TIMESTAMP, SQLiteTableBuilder.TYPE_INTEGER)
.addColumn(KEY_SOURCE_TYPE, SQLiteTableBuilder.TYPE_INTEGER)
.createTable();
}
public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
// DB version 2 adds KEY_PACKAGE_SIGNATURE column. Since this was added
// prior to release, we'll just clear the table.
if (oldVersion < 2) {
LogUtils.log(LabelsTable.class, Log.INFO,
"Dropping table %s to upgrade from version %d to version %d.", TABLE_NAME,
oldVersion, newVersion);
database.execSQL(String.format(Locale.ROOT,
"DROP TABLE IF EXISTS %s", TABLE_NAME));
// Recreate table.
onCreate(database);
return;
}
// if update from 2 to higher - keep labels and add source type column
if (oldVersion < 3) {
addSourceTypeColumn(database);
}
}
private static void addSourceTypeColumn(SQLiteDatabase database) {
database.execSQL(String.format(Locale.ROOT,
"ALTER TABLE %s ADD COLUMN %s INTEGER DEFAULT %d",
TABLE_NAME, KEY_SOURCE_TYPE, CustomLabelManager.SOURCE_TYPE_USER));
}
}