/** * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr) * This file is part of CSipSimple. * * CSipSimple is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * If you own a pjsip commercial license you can also redistribute it * and/or modify it under the terms of the GNU Lesser General Public License * as an android library. * * CSipSimple is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CSipSimple. If not, see <http://www.gnu.org/licenses/>. */ package com.csipsimple.db; import android.content.Context; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.provider.CallLog; import com.csipsimple.api.SipManager; import com.csipsimple.api.SipMessage; import com.csipsimple.api.SipProfile; import com.csipsimple.models.Filter; import com.csipsimple.utils.Log; public class DBAdapter { private final static String THIS_FILE = "SIP ACC_DB"; private final Context context; private DatabaseHelper databaseHelper; public DBAdapter(Context aContext) { context = aContext; databaseHelper = new DatabaseHelper(context); } public static class DatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 40; // Creation sql command private static final String TABLE_ACCOUNT_CREATE = "CREATE TABLE IF NOT EXISTS " + SipProfile.ACCOUNTS_TABLE_NAME + " (" + SipProfile.FIELD_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT," // Application relative fields + SipProfile.FIELD_ACTIVE + " INTEGER," + SipProfile.FIELD_WIZARD + " TEXT," + SipProfile.FIELD_DISPLAY_NAME + " TEXT," // Here comes pjsua_acc_config fields + SipProfile.FIELD_PRIORITY + " INTEGER," + SipProfile.FIELD_ACC_ID + " TEXT NOT NULL," + SipProfile.FIELD_REG_URI + " TEXT," + SipProfile.FIELD_MWI_ENABLED + " BOOLEAN," + SipProfile.FIELD_PUBLISH_ENABLED + " INTEGER," + SipProfile.FIELD_REG_TIMEOUT + " INTEGER," + SipProfile.FIELD_KA_INTERVAL + " INTEGER," + SipProfile.FIELD_PIDF_TUPLE_ID + " TEXT," + SipProfile.FIELD_FORCE_CONTACT + " TEXT," + SipProfile.FIELD_ALLOW_CONTACT_REWRITE + " INTEGER," + SipProfile.FIELD_CONTACT_REWRITE_METHOD + " INTEGER," + SipProfile.FIELD_CONTACT_PARAMS + " TEXT," + SipProfile.FIELD_CONTACT_URI_PARAMS + " TEXT," + SipProfile.FIELD_TRANSPORT + " INTEGER," + SipProfile.FIELD_DEFAULT_URI_SCHEME + " TEXT," + SipProfile.FIELD_USE_SRTP + " INTEGER," + SipProfile.FIELD_USE_ZRTP + " INTEGER," // Proxy infos + SipProfile.FIELD_PROXY + " TEXT," + SipProfile.FIELD_REG_USE_PROXY + " INTEGER," // And now cred_info since for now only one cred info can be managed // In future release a credential table should be created + SipProfile.FIELD_REALM + " TEXT," + SipProfile.FIELD_SCHEME + " TEXT," + SipProfile.FIELD_USERNAME + " TEXT," + SipProfile.FIELD_DATATYPE + " INTEGER," + SipProfile.FIELD_DATA + " TEXT," + SipProfile.FIELD_AUTH_INITIAL_AUTH + " INTEGER," + SipProfile.FIELD_AUTH_ALGO + " TEXT," + SipProfile.FIELD_SIP_STACK + " INTEGER," + SipProfile.FIELD_VOICE_MAIL_NBR + " TEXT," + SipProfile.FIELD_REG_DELAY_BEFORE_REFRESH + " INTEGER," + SipProfile.FIELD_TRY_CLEAN_REGISTERS + " INTEGER," + SipProfile.FIELD_USE_RFC5626 + " INTEGER DEFAULT 1," + SipProfile.FIELD_RFC5626_INSTANCE_ID + " TEXT," + SipProfile.FIELD_RFC5626_REG_ID + " TEXT," + SipProfile.FIELD_VID_IN_AUTO_SHOW + " INTEGER DEFAULT -1," + SipProfile.FIELD_VID_OUT_AUTO_TRANSMIT + " INTEGER DEFAULT -1," + SipProfile.FIELD_RTP_PORT + " INTEGER DEFAULT -1," + SipProfile.FIELD_RTP_ENABLE_QOS + " INTEGER DEFAULT -1," + SipProfile.FIELD_RTP_QOS_DSCP + " INTEGER DEFAULT -1," + SipProfile.FIELD_RTP_BOUND_ADDR + " TEXT," + SipProfile.FIELD_RTP_PUBLIC_ADDR + " TEXT," + SipProfile.FIELD_ANDROID_GROUP + " TEXT," + SipProfile.FIELD_ALLOW_VIA_REWRITE + " INTEGER DEFAULT 0," + SipProfile.FIELD_ALLOW_SDP_NAT_REWRITE + " INTEGER DEFAULT 0," + SipProfile.FIELD_SIP_STUN_USE + " INTEGER DEFAULT -1," + SipProfile.FIELD_MEDIA_STUN_USE + " INTEGER DEFAULT -1," + SipProfile.FIELD_ICE_CFG_USE + " INTEGER DEFAULT -1," + SipProfile.FIELD_ICE_CFG_ENABLE + " INTEGER DEFAULT 0," + SipProfile.FIELD_TURN_CFG_USE + " INTEGER DEFAULT -1," + SipProfile.FIELD_TURN_CFG_ENABLE + " INTEGER DEFAULT 0," + SipProfile.FIELD_TURN_CFG_SERVER + " TEXT," + SipProfile.FIELD_TURN_CFG_USER + " TEXT," + SipProfile.FIELD_TURN_CFG_PASSWORD + " TEXT," + SipProfile.FIELD_IPV6_MEDIA_USE + " INTEGER DEFAULT 0," + SipProfile.FIELD_WIZARD_DATA + " TEXT" + ");"; private final static String TABLE_CALLLOGS_CREATE = "CREATE TABLE IF NOT EXISTS " + SipManager.CALLLOGS_TABLE_NAME + " (" + CallLog.Calls._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + CallLog.Calls.CACHED_NAME + " TEXT," + CallLog.Calls.CACHED_NUMBER_LABEL + " TEXT," + CallLog.Calls.CACHED_NUMBER_TYPE + " INTEGER," + CallLog.Calls.DATE + " INTEGER," + CallLog.Calls.DURATION + " INTEGER," + CallLog.Calls.NEW + " INTEGER," + CallLog.Calls.NUMBER + " TEXT," + CallLog.Calls.TYPE + " INTEGER," + SipManager.CALLLOG_PROFILE_ID_FIELD + " INTEGER," + SipManager.CALLLOG_STATUS_CODE_FIELD + " INTEGER," + SipManager.CALLLOG_STATUS_TEXT_FIELD + " TEXT" +");"; private static final String TABLE_FILTERS_CREATE = "CREATE TABLE IF NOT EXISTS " + SipManager.FILTERS_TABLE_NAME + " (" + Filter._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Filter.FIELD_PRIORITY + " INTEGER," // Foreign key to account + Filter.FIELD_ACCOUNT + " INTEGER," // Match/replace + Filter.FIELD_MATCHES + " TEXT," + Filter.FIELD_REPLACE + " TEXT," + Filter.FIELD_ACTION + " INTEGER" + ");"; private final static String TABLE_MESSAGES_CREATE = "CREATE TABLE IF NOT EXISTS " + SipMessage.MESSAGES_TABLE_NAME + " (" + SipMessage.FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + SipMessage.FIELD_FROM + " TEXT," + SipMessage.FIELD_TO + " TEXT," + SipMessage.FIELD_CONTACT + " TEXT," + SipMessage.FIELD_BODY + " TEXT," + SipMessage.FIELD_MIME_TYPE + " TEXT," + SipMessage.FIELD_TYPE + " INTEGER," + SipMessage.FIELD_DATE + " INTEGER," + SipMessage.FIELD_STATUS + " INTEGER," + SipMessage.FIELD_READ + " BOOLEAN," + SipMessage.FIELD_FROM_FULL + " TEXT" +");"; DatabaseHelper(Context context) { super(context, SipManager.AUTHORITY, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_ACCOUNT_CREATE); db.execSQL(TABLE_CALLLOGS_CREATE); db.execSQL(TABLE_FILTERS_CREATE); db.execSQL(TABLE_MESSAGES_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(THIS_FILE, "Upgrading database from version " + oldVersion + " to " + newVersion); if(oldVersion < 1) { db.execSQL("DROP TABLE IF EXISTS " + SipProfile.ACCOUNTS_TABLE_NAME); } if(oldVersion < 5) { try { db.execSQL("ALTER TABLE "+SipProfile.ACCOUNTS_TABLE_NAME+" ADD "+SipProfile.FIELD_KA_INTERVAL+" INTEGER"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 6) { db.execSQL("DROP TABLE IF EXISTS "+SipManager.FILTERS_TABLE_NAME); } if(oldVersion < 10) { try { db.execSQL("ALTER TABLE "+SipProfile.ACCOUNTS_TABLE_NAME+" ADD "+ SipProfile.FIELD_ALLOW_CONTACT_REWRITE + " INTEGER"); db.execSQL("ALTER TABLE "+SipProfile.ACCOUNTS_TABLE_NAME+" ADD "+ SipProfile.FIELD_CONTACT_REWRITE_METHOD + " INTEGER"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 13) { try { db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD " + SipProfile.FIELD_TRANSPORT + " INTEGER"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRANSPORT + "=" + SipProfile.TRANSPORT_UDP + " WHERE prevent_tcp=1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRANSPORT + "=" + SipProfile.TRANSPORT_TCP + " WHERE use_tcp=1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRANSPORT + "=" + SipProfile.TRANSPORT_AUTO + " WHERE use_tcp=0 AND prevent_tcp=0"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 17) { try { db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_KA_INTERVAL + "=0"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 18) { try { //As many users are crying... remove auto transport and force udp db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRANSPORT + "="+SipProfile.TRANSPORT_UDP +" WHERE "+ SipProfile.FIELD_TRANSPORT + "=" + SipProfile.TRANSPORT_AUTO); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 22) { try { //Add use proxy row db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD "+ SipProfile.FIELD_REG_USE_PROXY + " INTEGER"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_REG_USE_PROXY + "=3"); //Add stack field db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD "+ SipProfile.FIELD_SIP_STACK + " INTEGER"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_SIP_STACK + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 23) { try { //Add use zrtp row db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD "+ SipProfile.FIELD_USE_ZRTP + " INTEGER"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_USE_ZRTP + "=-1"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 24) { try { //Add voice mail row db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD "+ SipProfile.FIELD_VOICE_MAIL_NBR + " TEXT"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_VOICE_MAIL_NBR + "=''"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 25) { try { //Add voice mail row db.execSQL("ALTER TABLE " + SipMessage.MESSAGES_TABLE_NAME + " ADD "+ SipMessage.FIELD_FROM_FULL + " TEXT"); db.execSQL("UPDATE " + SipMessage.MESSAGES_TABLE_NAME + " SET " + SipMessage.FIELD_FROM_FULL + "="+ SipMessage.FIELD_FROM); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 26) { try { //Add reg delay before refresh row addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_REG_DELAY_BEFORE_REFRESH, "INTEGER DEFAULT -1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_REG_DELAY_BEFORE_REFRESH + "=-1"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 27) { try { //Add reg delay before refresh row addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TRY_CLEAN_REGISTERS, "INTEGER DEFAULT 0"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRY_CLEAN_REGISTERS + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 28) { try { // Add call log profile id addColumn(db, SipManager.CALLLOGS_TABLE_NAME, SipManager.CALLLOG_PROFILE_ID_FIELD, "INTEGER"); // Add call log status code addColumn(db, SipManager.CALLLOGS_TABLE_NAME, SipManager.CALLLOG_STATUS_CODE_FIELD, "INTEGER"); db.execSQL("UPDATE " + SipManager.CALLLOGS_TABLE_NAME + " SET " + SipManager.CALLLOG_STATUS_CODE_FIELD + "=200"); // Add call log status text addColumn(db, SipManager.CALLLOGS_TABLE_NAME, SipManager.CALLLOG_STATUS_TEXT_FIELD, "TEXT"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 30) { try { //Add reg delay before refresh row addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_USE_RFC5626, "INTEGER DEFAULT 1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RFC5626_INSTANCE_ID, "TEXT"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RFC5626_REG_ID, "TEXT"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_VID_IN_AUTO_SHOW, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_VID_OUT_AUTO_TRANSMIT, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RTP_PORT, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RTP_ENABLE_QOS, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RTP_QOS_DSCP, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RTP_PUBLIC_ADDR, "TEXT"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_RTP_BOUND_ADDR, "TEXT"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } // Nightly build bug -- restore mime type field to mime_type if(oldVersion == 30) { try { addColumn(db, SipMessage.MESSAGES_TABLE_NAME, SipMessage.FIELD_MIME_TYPE, "TEXT"); db.execSQL("UPDATE " + SipMessage.MESSAGES_TABLE_NAME + " SET " + SipMessage.FIELD_MIME_TYPE + "='text/plain'"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 32) { try { //Add android group for buddy list addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_ANDROID_GROUP, "TEXT"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 33) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_ALLOW_VIA_REWRITE, "INTEGER DEFAULT 0"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_ALLOW_VIA_REWRITE + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 34) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_SIP_STUN_USE, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_MEDIA_STUN_USE, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_ICE_CFG_USE, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_ICE_CFG_ENABLE, "INTEGER DEFAULT 0"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TURN_CFG_USE, "INTEGER DEFAULT -1"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TURN_CFG_ENABLE, "INTEGER DEFAULT 0"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TURN_CFG_SERVER, "TEXT"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TURN_CFG_USER, "TEXT"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_TURN_CFG_PASSWORD, "TEXT"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_SIP_STUN_USE + "=-1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_MEDIA_STUN_USE + "=-1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_ICE_CFG_USE + "=-1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_ICE_CFG_ENABLE + "=0"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TURN_CFG_USE + "=-1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TURN_CFG_ENABLE + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 35) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_IPV6_MEDIA_USE, "INTEGER DEFAULT 0"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_IPV6_MEDIA_USE + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 36) { try { // Enable try to clean register for all but ones that doesn't support contact rewrite normal (legacy) db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRY_CLEAN_REGISTERS + "=1 WHERE 1"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_TRY_CLEAN_REGISTERS + "=0 WHERE "+SipProfile.FIELD_CONTACT_REWRITE_METHOD+"=1"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 37) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_AUTH_INITIAL_AUTH, "INTEGER DEFAULT 0"); addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_AUTH_ALGO, "TEXT"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 38) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_WIZARD_DATA, "TEXT"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 39) { try { db.execSQL("ALTER TABLE " + SipProfile.ACCOUNTS_TABLE_NAME + " ADD " + SipProfile.FIELD_DEFAULT_URI_SCHEME + " TEXT"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } if(oldVersion < 40) { try { addColumn(db, SipProfile.ACCOUNTS_TABLE_NAME, SipProfile.FIELD_ALLOW_SDP_NAT_REWRITE, "INTEGER DEFAULT 0"); db.execSQL("UPDATE " + SipProfile.ACCOUNTS_TABLE_NAME + " SET " + SipProfile.FIELD_ALLOW_SDP_NAT_REWRITE + "=0"); Log.d(THIS_FILE, "Upgrade done"); }catch(SQLiteException e) { Log.e(THIS_FILE, "Upgrade fail... maybe a crappy rom...", e); } } onCreate(db); } } private boolean opened = false; /** * Open database * * @return database adapter * @throws SQLException */ public DBAdapter open() throws SQLException { databaseHelper.getWritableDatabase(); opened = true; return this; } /** * Close database */ public void close() { databaseHelper.close(); opened = false; } public boolean isOpen() { return opened; } private static void addColumn(SQLiteDatabase db, String table, String field, String type) { db.execSQL("ALTER TABLE " + table + " ADD "+ field + " " + type); } }