Blame client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java

Packit Service fa4841
/*
Packit Service fa4841
   Android Bookmark Database
Packit Service fa4841
Packit Service fa4841
   Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
Packit Service fa4841
Packit Service fa4841
   This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
Packit Service fa4841
   If a copy of the MPL was not distributed with this file, You can obtain one at
Packit Service fa4841
   http://mozilla.org/MPL/2.0/.
Packit Service fa4841
*/
Packit Service fa4841
Packit Service fa4841
package com.freerdp.freerdpcore.services;
Packit Service fa4841
Packit Service fa4841
import android.content.ContentValues;
Packit Service fa4841
import android.content.Context;
Packit Service fa4841
import android.database.Cursor;
Packit Service fa4841
import android.database.sqlite.SQLiteDatabase;
Packit Service fa4841
import android.database.sqlite.SQLiteOpenHelper;
Packit Service fa4841
import android.provider.BaseColumns;
Packit Service fa4841
import android.util.Log;
Packit Service fa4841
Packit Service fa4841
import java.util.ArrayList;
Packit Service fa4841
import java.util.Arrays;
Packit Service fa4841
import java.util.List;
Packit Service fa4841
Packit Service fa4841
public class BookmarkDB extends SQLiteOpenHelper
Packit Service fa4841
{
Packit Service fa4841
	public static final String ID = BaseColumns._ID;
Packit Service fa4841
	private static final int DB_VERSION = 9;
Packit Service fa4841
	private static final String DB_BACKUP_PREFIX = "temp_";
Packit Service fa4841
	private static final String DB_NAME = "bookmarks.db";
Packit Service fa4841
	static final String DB_TABLE_BOOKMARK = "tbl_manual_bookmarks";
Packit Service fa4841
	static final String DB_TABLE_SCREEN = "tbl_screen_settings";
Packit Service fa4841
	static final String DB_TABLE_PERFORMANCE = "tbl_performance_flags";
Packit Service fa4841
	private static final String[] DB_TABLES = { DB_TABLE_BOOKMARK, DB_TABLE_SCREEN,
Packit Service fa4841
		                                        DB_TABLE_PERFORMANCE };
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_SCREEN_COLORS = "colors";
Packit Service fa4841
	static final String DB_KEY_SCREEN_RESOLUTION = "resolution";
Packit Service fa4841
	static final String DB_KEY_SCREEN_WIDTH = "width";
Packit Service fa4841
	static final String DB_KEY_SCREEN_HEIGHT = "height";
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_SCREEN_SETTINGS = "screen_settings";
Packit Service fa4841
	static final String DB_KEY_SCREEN_SETTINGS_3G = "screen_3g";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_FLAGS = "performance_flags";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_FLAGS_3G = "performance_3g";
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_RFX = "perf_remotefx";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_GFX = "perf_gfx";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_H264 = "perf_gfx_h264";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_WALLPAPER = "perf_wallpaper";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_THEME = "perf_theming";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_DRAG = "perf_full_window_drag";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_MENU_ANIMATIONS = "perf_menu_animations";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_FONTS = "perf_font_smoothing";
Packit Service fa4841
	static final String DB_KEY_PERFORMANCE_COMPOSITION = "perf_desktop_composition";
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_LABEL = "label";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_HOSTNAME = "hostname";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_USERNAME = "username";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_PASSWORD = "password";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_DOMAIN = "domain";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_PORT = "port";
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_REDIRECT_SDCARD = "redirect_sdcard";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_REDIRECT_SOUND = "redirect_sound";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_REDIRECT_MICROPHONE = "redirect_microphone";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_SECURITY = "security";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_REMOTE_PROGRAM = "remote_program";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_WORK_DIR = "work_dir";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_ASYNC_CHANNEL = "async_channel";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_ASYNC_INPUT = "async_input";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_ASYNC_UPDATE = "async_update";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_CONSOLE_MODE = "console_mode";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_DEBUG_LEVEL = "debug_level";
Packit Service fa4841
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_ENABLE = "enable_gateway_settings";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_HOSTNAME = "gateway_hostname";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_PORT = "gateway_port";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_USERNAME = "gateway_username";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_PASSWORD = "gateway_password";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_GW_DOMAIN = "gateway_domain";
Packit Service fa4841
	static final String DB_KEY_BOOKMARK_3G_ENABLE = "enable_3g_settings";
Packit Service fa4841
Packit Service fa4841
	public BookmarkDB(Context context)
Packit Service fa4841
	{
Packit Service fa4841
		super(context, DB_NAME, null, DB_VERSION);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private static List<String> GetColumns(SQLiteDatabase db, String tableName)
Packit Service fa4841
	{
Packit Service fa4841
		List<String> ar = null;
Packit Service fa4841
		Cursor c = null;
Packit Service fa4841
		try
Packit Service fa4841
		{
Packit Service fa4841
			c = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 1", null);
Packit Service fa4841
			if (c != null)
Packit Service fa4841
			{
Packit Service fa4841
				ar = new ArrayList<>(Arrays.asList(c.getColumnNames()));
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
		catch (Exception e)
Packit Service fa4841
		{
Packit Service fa4841
			Log.v(tableName, e.getMessage(), e);
Packit Service fa4841
			e.printStackTrace();
Packit Service fa4841
		}
Packit Service fa4841
		finally
Packit Service fa4841
		{
Packit Service fa4841
			if (c != null)
Packit Service fa4841
				c.close();
Packit Service fa4841
		}
Packit Service fa4841
		return ar;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private static String joinStrings(List<String> list, String delim)
Packit Service fa4841
	{
Packit Service fa4841
		StringBuilder buf = new StringBuilder();
Packit Service fa4841
		int num = list.size();
Packit Service fa4841
		for (int i = 0; i < num; i++)
Packit Service fa4841
		{
Packit Service fa4841
			if (i != 0)
Packit Service fa4841
				buf.append(delim);
Packit Service fa4841
			buf.append((String)list.get(i));
Packit Service fa4841
		}
Packit Service fa4841
		return buf.toString();
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void backupTables(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		for (String table : DB_TABLES)
Packit Service fa4841
		{
Packit Service fa4841
			final String tmpTable = DB_BACKUP_PREFIX + table;
Packit Service fa4841
			final String query = "ALTER TABLE '" + table + "' RENAME TO '" + tmpTable + "'";
Packit Service fa4841
			try
Packit Service fa4841
			{
Packit Service fa4841
				db.execSQL(query);
Packit Service fa4841
			}
Packit Service fa4841
			catch (Exception e)
Packit Service fa4841
			{
Packit Service fa4841
				/* Ignore errors if table does not exist. */
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void dropOldTables(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		for (String table : DB_TABLES)
Packit Service fa4841
		{
Packit Service fa4841
			final String tmpTable = DB_BACKUP_PREFIX + table;
Packit Service fa4841
			final String query = "DROP TABLE IF EXISTS '" + tmpTable + "'";
Packit Service fa4841
			db.execSQL(query);
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void createDB(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		final String sqlScreenSettings =
Packit Service fa4841
		    "CREATE TABLE IF NOT EXISTS " + DB_TABLE_SCREEN + " (" + ID + " INTEGER PRIMARY KEY, " +
Packit Service fa4841
		    DB_KEY_SCREEN_COLORS + " INTEGER DEFAULT 16, " + DB_KEY_SCREEN_RESOLUTION +
Packit Service fa4841
		    " INTEGER DEFAULT 0, " + DB_KEY_SCREEN_WIDTH + ", " + DB_KEY_SCREEN_HEIGHT + ");";
Packit Service fa4841
Packit Service fa4841
		db.execSQL(sqlScreenSettings);
Packit Service fa4841
Packit Service fa4841
		final String sqlPerformanceFlags =
Packit Service fa4841
		    "CREATE TABLE IF NOT EXISTS " + DB_TABLE_PERFORMANCE + " (" + ID +
Packit Service fa4841
		    " INTEGER PRIMARY KEY, " + DB_KEY_PERFORMANCE_RFX + " INTEGER, " +
Packit Service fa4841
		    DB_KEY_PERFORMANCE_GFX + " INTEGER, " + DB_KEY_PERFORMANCE_H264 + " INTEGER, " +
Packit Service fa4841
		    DB_KEY_PERFORMANCE_WALLPAPER + " INTEGER, " + DB_KEY_PERFORMANCE_THEME + " INTEGER, " +
Packit Service fa4841
		    DB_KEY_PERFORMANCE_DRAG + " INTEGER, " + DB_KEY_PERFORMANCE_MENU_ANIMATIONS +
Packit Service fa4841
		    " INTEGER, " + DB_KEY_PERFORMANCE_FONTS + " INTEGER, " +
Packit Service fa4841
		    DB_KEY_PERFORMANCE_COMPOSITION + " INTEGER);";
Packit Service fa4841
Packit Service fa4841
		db.execSQL(sqlPerformanceFlags);
Packit Service fa4841
Packit Service fa4841
		final String sqlManualBookmarks = getManualBookmarksCreationString();
Packit Service fa4841
		db.execSQL(sqlManualBookmarks);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void upgradeTables(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		for (String table : DB_TABLES)
Packit Service fa4841
		{
Packit Service fa4841
			final String tmpTable = DB_BACKUP_PREFIX + table;
Packit Service fa4841
Packit Service fa4841
			final List<String> newColumns = GetColumns(db, table);
Packit Service fa4841
			List<String> columns = GetColumns(db, tmpTable);
Packit Service fa4841
Packit Service fa4841
			if (columns != null)
Packit Service fa4841
			{
Packit Service fa4841
				columns.retainAll(newColumns);
Packit Service fa4841
Packit Service fa4841
				// restore data
Packit Service fa4841
				final String cols = joinStrings(columns, ",");
Packit Service fa4841
				final String query = String.format("INSERT INTO %s (%s) SELECT %s from '%s'", table,
Packit Service fa4841
				                                   cols, cols, tmpTable);
Packit Service fa4841
				db.execSQL(query);
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void downgradeTables(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		for (String table : DB_TABLES)
Packit Service fa4841
		{
Packit Service fa4841
			final String tmpTable = DB_BACKUP_PREFIX + table;
Packit Service fa4841
Packit Service fa4841
			List<String> oldColumns = GetColumns(db, table);
Packit Service fa4841
			final List<String> columns = GetColumns(db, tmpTable);
Packit Service fa4841
Packit Service fa4841
			if (oldColumns != null)
Packit Service fa4841
			{
Packit Service fa4841
				oldColumns.retainAll(columns);
Packit Service fa4841
Packit Service fa4841
				// restore data
Packit Service fa4841
				final String cols = joinStrings(oldColumns, ",");
Packit Service fa4841
				final String query = String.format("INSERT INTO %s (%s) SELECT %s from '%s'", table,
Packit Service fa4841
				                                   cols, cols, tmpTable);
Packit Service fa4841
				db.execSQL(query);
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private List<String> getTableNames(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		final String query = "SELECT name FROM sqlite_master WHERE type='table'";
Packit Service fa4841
		Cursor cursor = db.rawQuery(query, null);
Packit Service fa4841
		List<String> list = new ArrayList<>();
Packit Service fa4841
		try
Packit Service fa4841
		{
Packit Service fa4841
			if (cursor.moveToFirst() && (cursor.getCount() > 0))
Packit Service fa4841
			{
Packit Service fa4841
				while (!cursor.isAfterLast())
Packit Service fa4841
				{
Packit Service fa4841
					final String name = cursor.getString(cursor.getColumnIndex("name"));
Packit Service fa4841
					list.add(name);
Packit Service fa4841
					cursor.moveToNext();
Packit Service fa4841
				}
Packit Service fa4841
			}
Packit Service fa4841
		}
Packit Service fa4841
		finally
Packit Service fa4841
		{
Packit Service fa4841
			cursor.close();
Packit Service fa4841
		}
Packit Service fa4841
Packit Service fa4841
		return list;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void insertDefault(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		ContentValues screenValues = new ContentValues();
Packit Service fa4841
		screenValues.put(DB_KEY_SCREEN_COLORS, 32);
Packit Service fa4841
		screenValues.put(DB_KEY_SCREEN_RESOLUTION, 1);
Packit Service fa4841
		screenValues.put(DB_KEY_SCREEN_WIDTH, 1024);
Packit Service fa4841
		screenValues.put(DB_KEY_SCREEN_HEIGHT, 768);
Packit Service fa4841
Packit Service fa4841
		final long idScreen = db.insert(DB_TABLE_SCREEN, null, screenValues);
Packit Service fa4841
		final long idScreen3g = db.insert(DB_TABLE_SCREEN, null, screenValues);
Packit Service fa4841
Packit Service fa4841
		ContentValues performanceValues = new ContentValues();
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_RFX, 1);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_GFX, 1);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_H264, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_WALLPAPER, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_THEME, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_DRAG, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_MENU_ANIMATIONS, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_FONTS, 0);
Packit Service fa4841
		performanceValues.put(DB_KEY_PERFORMANCE_COMPOSITION, 0);
Packit Service fa4841
Packit Service fa4841
		final long idPerformance = db.insert(DB_TABLE_PERFORMANCE, null, performanceValues);
Packit Service fa4841
		final long idPerformance3g = db.insert(DB_TABLE_PERFORMANCE, null, performanceValues);
Packit Service fa4841
Packit Service fa4841
		ContentValues bookmarkValues = new ContentValues();
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_LABEL, "Test Server");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_HOSTNAME, "testservice.afreerdp.com");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_USERNAME, "");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_PASSWORD, "");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_DOMAIN, "");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_PORT, "3389");
Packit Service fa4841
Packit Service fa4841
		bookmarkValues.put(DB_KEY_SCREEN_SETTINGS, idScreen);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_SCREEN_SETTINGS_3G, idScreen3g);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_PERFORMANCE_FLAGS, idPerformance);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_PERFORMANCE_FLAGS_3G, idPerformance3g);
Packit Service fa4841
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_REDIRECT_SDCARD, 0);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_REDIRECT_SOUND, 0);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_REDIRECT_MICROPHONE, 0);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_SECURITY, 0);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_REMOTE_PROGRAM, "");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_WORK_DIR, "");
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_CHANNEL, 1);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_INPUT, 1);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_ASYNC_UPDATE, 1);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_CONSOLE_MODE, 0);
Packit Service fa4841
		bookmarkValues.put(DB_KEY_BOOKMARK_DEBUG_LEVEL, "INFO");
Packit Service fa4841
Packit Service fa4841
		db.insert(DB_TABLE_BOOKMARK, null, bookmarkValues);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public void onCreate(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		createDB(db);
Packit Service fa4841
		insertDefault(db);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private String getManualBookmarksCreationString()
Packit Service fa4841
	{
Packit Service fa4841
		return ("CREATE TABLE IF NOT EXISTS " + DB_TABLE_BOOKMARK + " (" + ID +
Packit Service fa4841
		        " INTEGER PRIMARY KEY, " + DB_KEY_BOOKMARK_LABEL + " TEXT NOT NULL, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_HOSTNAME + " TEXT NOT NULL, " + DB_KEY_BOOKMARK_USERNAME +
Packit Service fa4841
		        " TEXT NOT NULL, " + DB_KEY_BOOKMARK_PASSWORD + " TEXT, " + DB_KEY_BOOKMARK_DOMAIN +
Packit Service fa4841
		        " TEXT, " + DB_KEY_BOOKMARK_PORT + " TEXT, " + DB_KEY_SCREEN_SETTINGS +
Packit Service fa4841
		        " INTEGER NOT NULL, " + DB_KEY_PERFORMANCE_FLAGS + " INTEGER NOT NULL, "
Packit Service fa4841
Packit Service fa4841
		        + DB_KEY_BOOKMARK_GW_ENABLE + " INTEGER DEFAULT 0, " + DB_KEY_BOOKMARK_GW_HOSTNAME +
Packit Service fa4841
		        " TEXT, " + DB_KEY_BOOKMARK_GW_PORT + " INTEGER DEFAULT 443, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_GW_USERNAME + " TEXT, " + DB_KEY_BOOKMARK_GW_PASSWORD + " TEXT, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_GW_DOMAIN + " TEXT, "
Packit Service fa4841
Packit Service fa4841
		        + DB_KEY_BOOKMARK_3G_ENABLE + " INTEGER DEFAULT 0, " + DB_KEY_SCREEN_SETTINGS_3G +
Packit Service fa4841
		        " INTEGER NOT NULL, " + DB_KEY_PERFORMANCE_FLAGS_3G + " INTEGER NOT NULL, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_REDIRECT_SDCARD + " INTEGER DEFAULT 0, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_REDIRECT_SOUND + " INTEGER DEFAULT 0, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_REDIRECT_MICROPHONE + " INTEGER DEFAULT 0, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_SECURITY + " INTEGER, " + DB_KEY_BOOKMARK_REMOTE_PROGRAM +
Packit Service fa4841
		        " TEXT, " + DB_KEY_BOOKMARK_WORK_DIR + " TEXT, " + DB_KEY_BOOKMARK_ASYNC_CHANNEL +
Packit Service fa4841
		        " INTEGER DEFAULT 0, " + DB_KEY_BOOKMARK_ASYNC_INPUT + " INTEGER DEFAULT 0, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_ASYNC_UPDATE + " INTEGER DEFAULT 0, " +
Packit Service fa4841
		        DB_KEY_BOOKMARK_CONSOLE_MODE + " INTEGER, " + DB_KEY_BOOKMARK_DEBUG_LEVEL +
Packit Service fa4841
		        " TEXT DEFAULT 'INFO', "
Packit Service fa4841
Packit Service fa4841
		        + "FOREIGN KEY(" + DB_KEY_SCREEN_SETTINGS + ") REFERENCES " + DB_TABLE_SCREEN +
Packit Service fa4841
		        "(" + ID + "), "
Packit Service fa4841
		        + "FOREIGN KEY(" + DB_KEY_PERFORMANCE_FLAGS + ") REFERENCES " +
Packit Service fa4841
		        DB_TABLE_PERFORMANCE + "(" + ID + "), "
Packit Service fa4841
		        + "FOREIGN KEY(" + DB_KEY_SCREEN_SETTINGS_3G + ") REFERENCES " + DB_TABLE_SCREEN +
Packit Service fa4841
		        "(" + ID + "), "
Packit Service fa4841
		        + "FOREIGN KEY(" + DB_KEY_PERFORMANCE_FLAGS_3G + ") REFERENCES " +
Packit Service fa4841
		        DB_TABLE_PERFORMANCE + "(" + ID + ") "
Packit Service fa4841
Packit Service fa4841
		        + ");");
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void recreateDB(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		for (String table : DB_TABLES)
Packit Service fa4841
		{
Packit Service fa4841
			final String query = "DROP TABLE IF EXISTS '" + table + "'";
Packit Service fa4841
			db.execSQL(query);
Packit Service fa4841
		}
Packit Service fa4841
		onCreate(db);
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void upgradeDB(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		db.beginTransaction();
Packit Service fa4841
		try
Packit Service fa4841
		{
Packit Service fa4841
			/* Back up old tables. */
Packit Service fa4841
			dropOldTables(db);
Packit Service fa4841
			backupTables(db);
Packit Service fa4841
			createDB(db);
Packit Service fa4841
			upgradeTables(db);
Packit Service fa4841
Packit Service fa4841
			db.setTransactionSuccessful();
Packit Service fa4841
		}
Packit Service fa4841
		finally
Packit Service fa4841
		{
Packit Service fa4841
			db.endTransaction();
Packit Service fa4841
			dropOldTables(db);
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	private void downgradeDB(SQLiteDatabase db)
Packit Service fa4841
	{
Packit Service fa4841
		db.beginTransaction();
Packit Service fa4841
		try
Packit Service fa4841
		{
Packit Service fa4841
			/* Back up old tables. */
Packit Service fa4841
			dropOldTables(db);
Packit Service fa4841
			backupTables(db);
Packit Service fa4841
			createDB(db);
Packit Service fa4841
			downgradeTables(db);
Packit Service fa4841
Packit Service fa4841
			db.setTransactionSuccessful();
Packit Service fa4841
		}
Packit Service fa4841
		finally
Packit Service fa4841
		{
Packit Service fa4841
			db.endTransaction();
Packit Service fa4841
			dropOldTables(db);
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	// from
Packit Service fa4841
	// http://stackoverflow.com/questions/3424156/upgrade-sqlite-database-from-one-version-to-another
Packit Service fa4841
	@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
Packit Service fa4841
	{
Packit Service fa4841
		switch (oldVersion)
Packit Service fa4841
		{
Packit Service fa4841
			case 0:
Packit Service fa4841
			case 1:
Packit Service fa4841
			case 2:
Packit Service fa4841
			case 3:
Packit Service fa4841
			case 4:
Packit Service fa4841
			case 5:
Packit Service fa4841
			case 6:
Packit Service fa4841
			case 7:
Packit Service fa4841
			case 8:
Packit Service fa4841
			case 9:
Packit Service fa4841
				upgradeDB(db);
Packit Service fa4841
				break;
Packit Service fa4841
			default:
Packit Service fa4841
				recreateDB(db);
Packit Service fa4841
				break;
Packit Service fa4841
		}
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	@Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
Packit Service fa4841
	{
Packit Service fa4841
		downgradeDB(db);
Packit Service fa4841
	}
Packit Service fa4841
}