package com.android.mtp;
import android.annotation.IntDef;
import android.database.sqlite.SQLiteQueryBuilder;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashMap;
import java.util.Map;
class MtpDatabaseConstants {
static final int DATABASE_VERSION = 5;
static final String DATABASE_NAME = "database";
static final int FLAG_DATABASE_IN_MEMORY = 1;
static final int FLAG_DATABASE_IN_FILE = 0;
static final String TABLE_DOCUMENTS = "Documents";
static final String TABLE_ROOT_EXTRA = "RootExtra";
static final String TABLE_LAST_BOOT_COUNT = "LastBootCount";
static final String JOIN_ROOTS = createJoinFromClosure(
TABLE_DOCUMENTS,
TABLE_ROOT_EXTRA,
Document.COLUMN_DOCUMENT_ID,
Root.COLUMN_ROOT_ID);
static final String COLUMN_DEVICE_ID = "device_id";
static final String COLUMN_STORAGE_ID = "storage_id";
static final String COLUMN_OBJECT_HANDLE = "object_handle";
static final String COLUMN_PARENT_DOCUMENT_ID = "parent_document_id";
static final String COLUMN_DOCUMENT_TYPE = "document_type";
static final String COLUMN_ROW_STATE = "row_state";
static final String COLUMN_MAPPING_KEY = "mapping_key";
static final String COLUMN_VALUE = "value";
static final int ROW_STATE_VALID = 0;
static final int ROW_STATE_INVALIDATED = 1;
static final int ROW_STATE_DISCONNECTED = 2;
@IntDef(value = { DOCUMENT_TYPE_DEVICE, DOCUMENT_TYPE_STORAGE, DOCUMENT_TYPE_OBJECT })
@Retention(RetentionPolicy.SOURCE)
public @interface DocumentType {}
static final int DOCUMENT_TYPE_DEVICE = 0;
static final int DOCUMENT_TYPE_STORAGE = 1;
static final int DOCUMENT_TYPE_OBJECT = 2;
static final String SELECTION_DOCUMENT_ID = Document.COLUMN_DOCUMENT_ID + " = ?";
static final String SELECTION_ROOT_ID = Root.COLUMN_ROOT_ID + " = ?";
static final String QUERY_CREATE_DOCUMENTS =
"CREATE TABLE " + TABLE_DOCUMENTS + " (" +
Document.COLUMN_DOCUMENT_ID +
" INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_DEVICE_ID + " INTEGER," +
COLUMN_STORAGE_ID + " INTEGER," +
COLUMN_OBJECT_HANDLE + " INTEGER," +
COLUMN_PARENT_DOCUMENT_ID + " INTEGER," +
COLUMN_ROW_STATE + " INTEGER NOT NULL," +
COLUMN_DOCUMENT_TYPE + " INTEGER NOT NULL," +
COLUMN_MAPPING_KEY + " STRING," +
Document.COLUMN_MIME_TYPE + " TEXT NOT NULL," +
Document.COLUMN_DISPLAY_NAME + " TEXT NOT NULL," +
Document.COLUMN_SUMMARY + " TEXT," +
Document.COLUMN_LAST_MODIFIED + " INTEGER," +
Document.COLUMN_ICON + " INTEGER," +
Document.COLUMN_FLAGS + " INTEGER NOT NULL," +
Document.COLUMN_SIZE + " INTEGER);";
static final String QUERY_CREATE_ROOT_EXTRA =
"CREATE TABLE " + TABLE_ROOT_EXTRA + " (" +
Root.COLUMN_ROOT_ID + " INTEGER PRIMARY KEY," +
Root.COLUMN_FLAGS + " INTEGER NOT NULL," +
Root.COLUMN_AVAILABLE_BYTES + " INTEGER," +
Root.COLUMN_CAPACITY_BYTES + " INTEGER," +
Root.COLUMN_MIME_TYPES + " TEXT NOT NULL);";
static final String QUERY_CREATE_LAST_BOOT_COUNT =
"CREATE TABLE " + TABLE_LAST_BOOT_COUNT + " (value INTEGER NOT NULL);";
static final Map<String, String> COLUMN_MAP_ROOTS;
static {
COLUMN_MAP_ROOTS = new HashMap<>();
COLUMN_MAP_ROOTS.put(Root.COLUMN_ROOT_ID, TABLE_ROOT_EXTRA + "." + Root.COLUMN_ROOT_ID);
COLUMN_MAP_ROOTS.put(Root.COLUMN_FLAGS, TABLE_ROOT_EXTRA + "." + Root.COLUMN_FLAGS);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_ICON,
TABLE_DOCUMENTS + "." + Document.COLUMN_ICON + " AS " + Root.COLUMN_ICON);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_TITLE,
TABLE_DOCUMENTS + "." + Document.COLUMN_DISPLAY_NAME + " AS " + Root.COLUMN_TITLE);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_SUMMARY,
TABLE_DOCUMENTS + "." + Document.COLUMN_SUMMARY + " AS " + Root.COLUMN_SUMMARY);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_DOCUMENT_ID,
TABLE_DOCUMENTS + "." + Document.COLUMN_DOCUMENT_ID +
" AS " + Root.COLUMN_DOCUMENT_ID);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_AVAILABLE_BYTES, TABLE_ROOT_EXTRA + "." + Root.COLUMN_AVAILABLE_BYTES);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_CAPACITY_BYTES, TABLE_ROOT_EXTRA + "." + Root.COLUMN_CAPACITY_BYTES);
COLUMN_MAP_ROOTS.put(
Root.COLUMN_MIME_TYPES, TABLE_ROOT_EXTRA + "." + Root.COLUMN_MIME_TYPES);
COLUMN_MAP_ROOTS.put(COLUMN_DEVICE_ID, COLUMN_DEVICE_ID);
}
private static String createJoinFromClosure(
String table1, String table2, String column1, String column2) {
return table1 + " LEFT JOIN " + table2 +
" ON " + table1 + "." + column1 + " = " + table2 + "." + column2;
}
}